1. 程式人生 > >MySQL 資料庫-索引注意事項

MySQL 資料庫-索引注意事項

    索引注意事項 (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)聯表查詢,也可以使用索引:
  • 確保 ON 和 USING 中列上有索引。
  • 確保任何的 GROUP BY 和 ORDER BY 中的表示式只涉及一個表中列。
(9)查詢條件的欄位應使用正確的資料型別,否則MySQL 會自動做型別轉換,導致無法命中索引。   索引的代價: 1. 索引檔案本身要消耗儲存空間; 2. 在被索引的表上,INSERT/DELETE 會變慢; 3. MySQL在執行是,也要消耗資源維護索引;