MySQL之高效覆蓋索引
阿新 • • 發佈:2019-02-15
mysql中的一種十分高效有用的索引---覆蓋索引。
覆蓋索引用通俗的話講就是在select的時候只用去讀取索引而取得資料,無需進行二次select相關表。這樣的索引的葉子節點上面也包含了他們索引的資料。
select * from table_name;
select id,name from table_name;
在多數情況下,我們只應該去查詢我們有必要知道的列,這樣一來網路之間傳送的資料包小了,減少了網路通訊,你查詢的速度自然會得到提升。
select a from table_name where b ·····;這樣的一個查詢,都知道索引應該加在b上面,
查詢的處理過程:
首先去檢索b索引找到與其對應的索引,
然後根據索引區檢索正確的資料行。
這樣一來一去就是兩次檢索,能不能通過一次檢索而得到資料呢?
如果希望通過一次檢索得到資料,那麼索引上面就應該包含其索引相對的資料,這樣可能嗎?
讀到這,當然知道可能.
alter table_name add index (b,a);
新增一個這樣的索引就能實現了,
檢視是否使用了覆蓋索引;
explain select ·····;
·······
·······
······
extra:use index
如果出現了紅色的字型部分,就表示使用了覆蓋索引。
INNODB引擎在覆蓋索引上面更進一步:
innodb引擎的所有儲存了主鍵ID,事務ID,回滾指標,非主鍵ID,
他的查詢就會是非主鍵ID也可覆蓋來取得主鍵ID。