索引注意事項
(1)最左前綴原則
若是查詢的時候,查詢條件精確匹配索引的左邊連續一列或幾列,則能夠命中索引。
(2)避免where 子句中對字段施加函數,如to_date(create_time)>xxxxxx,這樣會形成沒法命中索引。
(3)在使用InnoDB 時,使用與業務無關的自增主鍵做爲主鍵,即便用邏輯主鍵,而不要使用業務主鍵。
(4)合理利用索引覆蓋
覆蓋索引(Covering index)指一個查詢語句的執行,只須要從輔助索引中就能夠獲得查詢記錄,而不須要查詢彙集索引中的記錄,也能夠稱之爲實現了索引覆蓋。
簡單來講,就是查詢條件命中了索引,而查詢字段也屬於索引中的字段。
當實現了覆蓋索引的時候,explain 命令的Extra 會顯示 using Index。
(5)避免冗餘索引
能夠查詢sys 庫的schemal_redundant_indexes 表來查看冗餘索引。
(6)將打算加索引的列設置爲 NOT NULL,不然將致使引擎放棄使用索引,而進行全表掃描。
(7)刪除長期未使用的索引
能夠查詢sys 庫的 schema_unused_indexes 視圖來查詢從未使用過的索引。
(8)聯表查詢,也能夠使用索引:
(9)查詢條件的字段應使用正確的數據類型,不然MySQL 會自動作類型轉換,致使沒法命中索引。
索引的代價:
1. 索引文件自己要消耗存儲空間;
2. 在被索引的表上,INSERT/DELETE 會變慢;
3. MySQL在運行是,也要消耗資源維護索引;