mysql索引種類及常見索引生效情況

一、什麼是索引

索引就好比我們書的目錄,是與表或視圖關聯的磁盤上結構,可以加快從表或視圖中檢索行的速度。索引中包含由表或視圖中的一列或多列生成的鍵。這些鍵存儲在一個結構(BTree)中,使SQL可以快速有效地查找與鍵值關聯的行。

二、索引的優缺點

1、 優點

  • 建立索引的列可以保證行的唯一性,生成唯一的rowId
  • 建立索引可以有效縮短數據的檢索時間
  • 建立索引可以加快表與表之間的連接
  • 爲用來排序或者是分組的字段添加索引可以加快分組和排序順序

2、缺點

  •  創建索引和維護索引需要時間成本,這個成本隨着數據量的增加而加大
  • 創建索引和維護索引需要空間成本,每一條索引都要佔據數據庫的物理存儲空間,數據量越大,佔用空間也越大(數據表佔據的是數據庫的數據空間)
  • 會降低表的增刪改的效率,因爲每次增刪改索引需要進行動態維護,導致時間變長

三、索引建立的原則

1、總的來說就是數據量大的,經常進行查詢操作的表要建立索引

2、表中字段建立索引應該遵循幾個原則

1)越小的數據類型通常更好:越小的數據類型通常在磁盤、內存中都需要更少的空間,處理起來更快。

2)  簡單的數據類型更好:整型數據比起字符,處理開銷更小,因爲字符串的比較更復雜,處理起來也更耗時。

3)  儘量避免NULL:應該指定列爲NOT NULL。含有空值的列很難進行查詢優化,因爲它們使得索引、索引的統計信息以及比較運算更加複雜。你應該用0、一個特殊的值或者一個空串代替空值。

4)  對非唯一的字段,例如“性別”這種大量重複值的字段,增加索引也沒有什麼意義,所以索引的建立應當更多的選取唯一性更高的字段。

 

四、mysql索引種類

1、主鍵索引(PRIMARY KEY)

唯一,不允許爲空,建立的規則是 int優於varchar,一般在建表的時候創建立,一般會設爲 int 而且是 AUTO_INCREMENT自增類型。

2、唯一索引(UNIQUE INDEX)

索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。創建示例:

CREATE UNIQUE INDEX account_UNIQUE_Index ON `award`(`account`);

3、普通索引(ORDINARY INDEX)

這是最基本的索引,它沒有任何限制。創建示例:

 CREATE INDEX account_Index ON `award`(`account`);

或 ALTER TABLE award ADD INDEX account_Index(`account`)

4、全文索引(FULLTEXT INDEX)

在mysql中fulltext 索引只針對 myisam生效,所以全文不常用到

5、組合索引(UNION INDEX)

多個普通索引組合在一起,在使用查詢的時候遵循mysql組合索引的"最左前綴",

CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...)

如果你建立了 組合索引(nickname_account_createdTime_Index) 那麼他實際包含的是3個索引 (nickname) (nickname,account)(nickname,account,created_time)

五、mysql索引失效情況

1、like右模糊匹配索引生效,左模糊不生效,如 name like '李%' 索引有效,name like '%李%' 索引無效

2、多列組合索引範圍查詢的列之後的列的索引不生效

3、 判斷空時候要用is null,用“=null”不走索引

4、group by分組不會使用索引

5、使用or時候,所有條件列都必須加上索引,只要一個不加索引都不生效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章