1. 程式人生 > >【面試寶典 - 核心篇 - 資料儲存】02 MySQL 索引使用的注意事項

【面試寶典 - 核心篇 - 資料儲存】02 MySQL 索引使用的注意事項

  • 索引不會包含 NULL 的列
    只要列中包含有 NULL 的值,都將不會被包含在索引中,複合索引中只要有一列含有 NULL 值,那麼這一列對於此符合索引就是無效的。

  • 使用短索引
    對串列進行索引,如果可以就應該指定一個字首長度。例如,如果有一個 char(255) 的列,如果在前 10 個或 20 個字元內,多數值是唯一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和 I/O 操作。

  • 索引列排序
    MySql 查詢只使用一個索引,因此如果 where 子句中已經使用了索引的話,那麼 order by 中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作,儘量不要包含多個列的排序,如果需要最好給這些列建複合索引。

  • like 語句操作
    一般情況下不鼓勵使用 like 操作,如果非使用不可,注意正確的使用方式。like ‘%aaa%’ 不會使用索引,而 like ‘aaa%’ 可以使用索引。

  • 不要在列上進行運算

  • 不使用 NOT IN 、<>、!=操作,但 < , <= ,= ,> , >= , BETWEEN , IN 是可以用到索引的

  • 索引要建立在經常進行select操作的欄位上
    這是因為,如果這些列很少用到,那麼有無索引並不能明顯改變查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。

  • 索引要建立在值比較唯一的欄位上

  • 對於那些定義為 text、image 和 bit 資料型別的列不應該增加索引。因為這些列的資料量要麼相當大,要麼取值很少

  • 在 where 和 join 中出現的列需要建立索引

  • where 的查詢條件裡有不等號 (where column != …) , MySql 將無法使用索引

  • 如果 where 字句的查詢條件裡使用了函式(如:where DAY(column)=…), MySql 將無法使用索引

  • 在 join 操作中(需要從多個數據表提取資料時),MySql 只有在主鍵和外來鍵的資料型別相同時才能使用索引,否則及時建立了索引也不會使用