1. 程式人生 > >覆蓋索引

覆蓋索引

nts 一個 mysql 減少 什麽是 fonts 執行 pan 決定

參考:http://blog.csdn.net/garfielder007/article/details/54295577

聚集索引和輔助索引

  • 聚集索引(主鍵索引)
—innodb存儲引擎是索引組織表,即表中的數據按照主鍵順序存放。而聚集索引就是按照每張表的主鍵構造一顆B+樹,同時葉子節點中存放的即為整張表的記錄數據聚集索引的葉子節點稱為數據頁,數據頁,數據頁!重要的事說三遍。聚集索引的這個特性決定了索引組織表中的數據也是索引的一部分。
  • 輔助索引(二級索引)
—非主鍵索引 —葉子節點=鍵值+書簽。Innodb存儲引擎的書簽就是相應行數據的主鍵索引值 輔助索引檢索數據圖示如下 由於檢索數據時,總是先獲取到書簽值(主鍵值),再返回查詢,因此輔助索引也被稱之為二級索引

什麽是覆蓋索引

覆蓋索引(covering index)指一個查詢語句的執行只需要從輔助索引中就可以得到查詢記錄,而不需要查詢聚集索引中的記錄。也可以稱之為實現了索引覆蓋。 那麽,優點顯而易見。輔助索引不包含一整行的記錄,因此可以大大減少IO操作。覆蓋索引是mysql dba常用的一種SQL優化手段

覆蓋索引的優點:

(1)索引條目通常遠小於數據行大小,如果只讀取索引,MySQL就會極大地減少數據訪問量。

(2)索引按照列值順序存儲,對於I/O密集的範圍查詢會比隨機從磁盤中讀取每一行數據的I/O要少很多。

(3)InnoDB的輔助索引(亦稱二級索引)在葉子節點中保存了行的主鍵值,如果二級索引能夠覆蓋查詢,則可不必對主鍵索引進行二次查詢了。

覆蓋索引就是從索引中直接獲取查詢結果,要使用覆蓋索引需要註意select查詢列中包含在索引列中;where條件包含索引列或者復合索引的前導列;查詢結果的字段長度盡可能少。

覆蓋索引