InnoDB索引

其數據文件本身就是索引文件。
相比myISAM,索引文件和數據文件是分離的,表數據文件本身就是按B+Tree組織的一個索引結構,樹的葉節點data域保存了完整的數據記錄。
這個索引的key就是數據表的主鍵,
因此innoDB表數據文件本身就是主索引,被成爲聚蔟索引,也叫聚集索引。
其餘的索引都爲輔助索引,
輔助索引data域存儲相應記錄主鍵的值而不是地址。
在根據主索引搜索時,直接找到key所在的節點即可取出數據,
根據輔助索引查找時,需要先取出主鍵的值,再走一遍主索引,
設計表時,不建議使用過長的字段作爲主鍵,
也不建議使用非單調的字段作爲主鍵,這樣會造成主索引頻繁分裂。


通過 explain 命令打印sql語句的執行計劃,判斷是否命中索引,
type:all 表示全表掃描
key:表示使用的索引,就是主鍵
extra:using filesort 需要額外的步驟來發現如何對返回的行排序
using temporary 需要創建一個臨時表來存儲結果,說明查詢需要優化

當全表掃描,或者索引字段數據重複率太高,將不會使用索引


  • 最左前綴原則
    查詢的適合查詢條件精確匹配索引的左邊連續一列或幾列,則此列就可以被用到

  • 避免使用where 子句對字段是假函數,to_date() 等。會造成無法命中索引。

  • 使用與業務無關的自增主鍵作爲主鍵,即使用邏輯主鍵,不要使用業務主鍵

  • 避免冗餘索引

  • 索引列爲not null, 避免全表掃描

  • 刪除不必要的、長期未使用的索引

  • 聯表查詢使用索引提高性能

  • group by 和order by 中只設計一個表中的列,纔有可能使用索引來優化

  • 查詢條件的字段應使用正確的數據類型,否則mysql會自動做數據類型轉換。導致無法命中索引。

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