1. 程式人生 > >MySQL之高效覆蓋索引

MySQL之高效覆蓋索引

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。