mysql 索引

  • 索引概念、索引模型

    索引實際上是一種數據結構,可以幫助咱們快速的檢索數據庫中的數據數據庫

    常見的MySQL主要有兩種結構:Hash索引和B+ Tree索引, InnoDB引擎,默認的是B+樹。數據結構

    Hash索引和B+ Tree索引 優缺點:排序

    哈希表是一種以key-value存儲數據的結構,因此多個數據在存儲關係上是徹底沒有任何順序關係的, 因此,對於區間查詢是沒法直接經過索引查詢的,就須要全表掃描。因此,哈希索引只適用於等值查詢的場景。索引

    而B+ Tree是一種多路平衡查詢樹,因此他的節點是自然有序的(左子節點小於父節點、父節點小於右子節點),因此對於範圍查詢的時候不須要作全表掃描。效率

   哈希索引沒辦法利用索引完成排序 哈希索引不支持多列聯合索引的最左匹配規則 若是有大量重複鍵值得狀況下,哈希索引的效率會很低,由於存在哈希碰撞問題數據

  • 聚簇索引、覆蓋索引

     索引B+ Tree的葉子節點存儲了整行數據的是主鍵索引,也被稱之爲聚簇索引。查詢

     而索引B+ Tree的葉子節點存儲了主鍵的值的是非主鍵索引,也被稱之爲非聚簇索引。哈希表

     區別:聚簇索引查詢會更快,由於主鍵索引樹的葉子節點直接就是咱們要查詢的整行數據了。而非主鍵索引的葉子節點是主鍵的值,查到主鍵的值之後,須要回表查詢屢次模型

     覆蓋索引 :

     指一個查詢語句的執行只用從索引中就可以取得,沒必要從數據表中讀取。也能夠稱之爲實現了索引覆蓋。

     當一條查詢語句符合覆蓋索引條件時,MySQL只須要經過索引就能夠返回查詢所須要的數據,這樣避免了查到索引後再返回表操做,減小I/O提升效率。

  • 聯合索引、最左前綴匹配

      在建立多列索引時,咱們根據業務需求,where子句中使用最頻繁的一列放在最左邊,由於MySQL索引查詢會遵循最左前綴匹配的原則,即最左優先,

      在檢索數據時從聯合索引的最左邊開始匹配。因此當咱們建立一個聯合索引的時候,如(key1,key2,key3),至關於建立了(key1)、(key1,key2)和(key1,key2,key3)三個索引,這就是最左匹配原則。

相關文章
相關標籤/搜索