Mysql

InnoDB 是否在二級索引 B-Tree 非葉節點中儲存行數?

  • October 16, 2015

InnoDB 是否在二級索引 B-Tree 非葉節點中儲存子節點的行數?

如果是這樣,MySQL 是否使用此資訊來加速具有範圍約束的 COUNT(*) 查詢(假設存在適當的索引)。

我不是 100% 確定第一部分,但我會說不 - 如果確實如此,它必須在每次寫入時一直更新計數,這意味著將更多頁面寫入磁碟並同步。當您添加/刪除葉節點時,在好的情況下,您只需要將一頁寫入磁碟,這樣您就必須更新所有這些“父節點” - 說多 2-5 頁,具體取決於頁數表中的行。

另一件事是 InnoDB 無論如何都不能在查詢中使用該資訊。當您執行 COUNT 時,您在某個事務中執行它,這通常意味著“可重複讀取”模式(但類似的原因將適用於其他模式)。因此查詢必須檢查目前事務範圍內每一行/記錄的*可見性。*而且您不能在 b-tree 中為每個活動事務保留單獨的計數。

引用自:https://dba.stackexchange.com/questions/118244