主索引频繁分裂
問題描述:
????????每個數據頁都會為存儲在它里邊兒的記錄生成一個頁目錄,在通過主鍵查找某條記錄的時候可以在頁目錄中使用二分法快速定位到對應的槽,然后再遍歷該槽對應分組中的記錄即可快速找到指定的記錄,如果主鍵不是id單調遞增的,有可能會出現頁頻繁分裂,主鍵重復、順序凌亂的問題,那么二分搜索時就做不到準確定位,(主索引是指在指定的索引字段活表達式中不允許出現重復值的索引)那么在這種情況下,主索引就會產生分裂。
?產生原因:
????????MySQL的索引中的?InnoDB中的索引,表都是根據主鍵順序以索引的形式存放的,其表數據文件本身就是按B+Tree組織的一個索引結構,樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,因此InnoDB表數據文件本身就是主索引。
????????主鍵索引的葉子節點存的是整行數據。在 InnoDB 里,主鍵索引也被稱為聚簇索引(clustered index)。 非主鍵索引的葉子節點內容是主鍵的值。在 InnoDB 里,非主鍵索引也被稱為二級索引(secondary index)。
????????根據非主鍵索引查詢到主鍵,再根據主鍵找到記錄的過程我們稱為回表;基于非主鍵索引的查詢需要多掃描一棵索引樹。因此,我們在應用中應該盡量使用主鍵查詢。
????????在根據主索引搜索時,直接找到key所在的節點即可取出數據;在根據輔助索引查找時,則需要先取出主鍵的值,在走一遍主索引。 因此,在設計表的時候,不建議使用過長的字段作為主鍵,也不建議使用非單調的字段作為主鍵,這樣會造成主索引頻繁分裂。
總結
- 上一篇: android studio 调用c++
- 下一篇: 解析html生成xpath,html使用