mysql索引基礎 Mysql 索引基礎

2021-10-18 05:44:06 字數 2156 閱讀 3966

什麼是索引?為什麼要建立索引?

索引,其實就是目錄。

索引,用於快速找出在某個列中有某個特定值的行。

不使用索引,mysql必須從第一條記錄開始查詢整張表,直到找出相關的行,那麼表越大,查詢資料所花費的時間就越多。

假如表中查詢的列有乙個索引(目錄),mysql能夠快速定位到達乙個位置去搜尋資料檔案,而不必查詢所有資料,那麼將會節省很大一部分時間。

舉個栗子:

假如,有一張person表,其中有2w條記錄,記錄著2w個人的資訊。

有乙個phone的字段記錄每個人的**號碼,現在想要查詢出**號碼為18991661323的人的資訊。

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

如果有了索引,那麼會將該phone欄位,通過一定的方法進行儲存,好讓查詢該字段上的資訊時,能夠快速找到對應的資料,而不必再遍歷所有2w條資料了。

其中mysql中的索引的儲存型別有兩種:btree、hash。 也就是用樹或hash值來儲存該欄位,要知道其中詳細是如何查詢的,就需要會演算法知識。

我們現在只需要知道索引的作用,功能是什麼就行。後面的隨筆我們會詳細講解各種索引模型。

mysql中索引的優點和缺點和使用原則

(1)優點

1、所有的mysql列型別(字段型別)都可以被索引,也就是可以給任意字段建立索引。

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

(2)缺點

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

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

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

(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、全文索引

全文索引,只有在myisam引擎上才能使用,只能在char、varchar、text型別欄位上使用全文索引。

全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該欄位所屬的記錄行,比如有"你是個程式設計師,c++程式設計師 ..." 通過程式設計師,可能就可以找到該條記錄。

1.4、空間索引

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

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

要求,引擎為myisam,建立空間索引的列,必須將其宣告為not null。

good good study, day day up.

順序 選擇 迴圈 總結

mysql 雜湊索引 MySQL索引之雜湊索引

雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...

mysql主鍵索引 MySQL索引之主鍵索引

在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...

mysql聚集索引 MySQL索引之聚集索引介紹

在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...