84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
眾所周知,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
的「覆蓋」。