首頁  >  問答  >  主體

為什麼 innodb 不在輔助/非聚集索引中儲存行指標?

眾所周知,innodb在輔助索引中只儲存主鍵值,這意味著我們需要再次遍歷聚集索引B 樹來取得行記錄。

為什麼不直接將行指標儲存在二級索引中以減少額外的查找工作?

P粉038161873P粉038161873404 天前553

全部回覆(1)我來回復

  • P粉469090753

    P粉4690907532023-09-12 16:06:28

    沒有「行指標」。 PRMARY KEY 的欄位具有在資料的 BTree 中定位行的功能。

    當然,透過 PK 查找可以說比「行指標」慢。但更新、刪除、區塊分割等都會自動處理。 (請參閱 Bill 的評論。)這使程式碼更加簡單。而且,在某些情況下,速度會更快。

    更快的簡單範例:Given

    PRIMARY KEY(id),
    INDEX(foo)   -- effectively (foo, id), as discussed above
    
    SELECT id FROM tbl WHERE foo = 123;

    在這個例子中,索引的BTree有完整的答案;無需存取資料的 BTree。因此,該索引稱為此 SELECT 的「覆蓋」。

    回覆
    0
  • 取消回覆