眾所周知,innodb在輔助索引中只儲存主鍵值,這意味著我們需要再次遍歷聚集索引B 樹來取得行記錄。
為什麼不直接將行指標儲存在二級索引中以減少額外的查找工作?
沒有「行指標」。 PRMARY KEY 的欄位具有在資料的 BTree 中定位行的功能。
PRMARY KEY
當然,透過 PK 查找可以說比「行指標」慢。但更新、刪除、區塊分割等都會自動處理。 (請參閱 Bill 的評論。)這使程式碼更加簡單。而且,在某些情況下,速度會更快。
更快的簡單範例:Given
PRIMARY KEY(id), INDEX(foo) -- effectively (foo, id), as discussed above SELECT id FROM tbl WHERE foo = 123;
在這個例子中,索引的BTree有完整的答案;無需存取資料的 BTree。因此,該索引稱為此 SELECT 的「覆蓋」。
SELECT
沒有「行指標」。
PRMARY KEY
的欄位具有在資料的 BTree 中定位行的功能。當然,透過 PK 查找可以說比「行指標」慢。但更新、刪除、區塊分割等都會自動處理。 (請參閱 Bill 的評論。)這使程式碼更加簡單。而且,在某些情況下,速度會更快。
更快的簡單範例:Given
在這個例子中,索引的BTree有完整的答案;無需存取資料的 BTree。因此,該索引稱為此
SELECT
的「覆蓋」。