Mysql詳解(一)Mysql中的索引

2021-09-02 17:33:56 字數 1832 閱讀 7844

索引用於快速找出在某個列中有一特定值的行,不使用索引,mysql必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多,如果表中查詢的列有乙個索引,mysql能夠快速到達乙個位置去搜尋資料檔案,而不必檢視所有資料,那麼將會節省很大一部分時間。

例如:有一張person表,其中有2w條記錄,記錄著2w個人的資訊。有乙個phone的字段記錄每個人的**號碼,現在想要查詢出**號碼為***x的人的資訊。

如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條資訊為止。

如果有了索引,那麼會將該phone欄位,通過一定的方法進行儲存,好讓查詢該字段上的資訊時,能夠快速找到對應的資料,而不必在遍歷2w條資料了。其中mysql中的索引的儲存型別有兩種:btree、hash。 也就是用樹或者hash值來儲存該欄位

使用場景依據

優點:1、所有的mysql列型別(字段型別)都可以被索引,也就是可以給任意字段設定索引

2、大大加快資料的查詢速度

缺點:1、建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加

2、索引也需要佔空間,我們知道資料表中的資料也會有最大上線設定的,如果我們有大量的索引,索引檔案可能會比資料檔案更快達到上線值

3、當對表中的資料進行增加、刪除、修改時,索引也需要動態的維護,降低了資料的維護速度。

使用原則:

通過上面說的優點和缺點,我們應該可以知道,並不是每個字段度設定索引就好,也不是索引越多越好,而是需要自己合理的使用。

1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該建立索引,

2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。

3、在不同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在乙個欄位上不同值較多應該建立索引。

注意:索引是在儲存引擎中實現的,也就是說不同的儲存引擎,會使用不同的索引

myisam和innodb儲存引擎:只支援btree索引, 也就是說預設使用btree,不能夠更換

memory/heap儲存引擎:支援hash和btree索引

1、索引我們分為四類來講 單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引、

1.1、單列索引:乙個索引只包含單個列,但乙個表中可以有多個單列索引。 這裡不要搞混淆了。

1.1.1、普通索引:

mysql中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點。

1.1.2、唯一索引:

索引列中的值必須是唯一的,但是允許為空值,

1.1.3、主鍵索引:

是一種特殊的唯一索引,不允許有空值。

1.2、組合索引

在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合。這個如果還不明白,等後面舉例講解時在細說

1.3、全文索引

1.4、空間索引

空間索引是對空間資料型別的字段建立的索引,mysql中的空間資料型別有四種,geometry、point、linestring、polygon。

在建立空間索引時,使用spatial關鍵字。

要求,引擎為myisam,建立空間索引的列,必須將其宣告為not null。具體細節看下面

五、總結

mysql的索引到這裡差不多就講完了,總結一下我們到目前為止應該知道哪些東西

1、索引是幹嘛的?為什麼要有索引?

這個很重要,需要自己理解一下,不懂就看頂部的講解

2、索引的分類

3、索引的操作

給表中建立索引,新增索引,刪除索引,刪除索引

mysql中的變數詳解

一 系統變數 1.說明 變數由系統定義,不是使用者定義,屬於伺服器層面 2.注意 系統變數包含全域性變數和會話變數,全域性變數需要新增global關鍵字,會話變數需要新增session關鍵字,如果不寫,缺省會話級別 使用步驟 1 檢視所有系統變數 show global session variab...

mysql中in的用法詳解

一 基礎用法 mysql中in常用於where表示式中,其作用是查詢某個範圍內的資料。select from where field in value1,value2,value3,當 in 前面加上 not 運算子時,表示與 in 相反的意思,即不在這些列表項內選擇 select from whe...

MySQL中鎖的詳解

myisam支援表鎖,同時也支援列所,表鎖加鎖方式 lock tables 表名 read lock tables 表名 write unlock tables 鎖名 鎖級別英文名稱 共享鎖行鎖 shared locks 排它鎖行鎖 exclusive locks 意向共享鎖 表鎖intention...