mysql分割槽表的底層原理

2021-10-21 17:05:27 字數 921 閱讀 4705

​ 分割槽表由多個相關的底層表實現,這個底層表也是由控制代碼物件標識,我們可以直接訪問各個分割槽。儲存引擎管理分割槽的各個底層表和管理普通表一樣(所有的底層表都必須使用相同的儲存引擎),分割槽表的索只是在各個底層表上各自加上乙個完全相同的索引。從儲存引擎的角度來看,底層表和普通表沒有任何不同,儲存引擎也無須知道這是乙個普通表還是乙個分割槽表的一部分。

​ 分割槽表的操作按照以下的操作邏輯進行:

select查詢

當查詢乙個分割槽表的時候,分割槽層先開啟並鎖住所有的底層表,優化器先判斷是否可以過濾部分分割槽,然後再呼叫對應的儲存引擎介面訪問各個分割槽的資料

insert操作

當寫入一條記錄的時候,分割槽層先開啟並鎖住所有的底層表,然後確定哪個分割槽接受這條記錄,再將記錄寫入對應底層表

delete操作

當刪除一條記錄時,分割槽層先開啟並鎖住所有的底層表,然後確定資料對應的分割槽,最後對相應底層表進行刪除操作

update操作

​當更新一條記錄時,分割槽層先開啟並鎖住所有的底層表,mysql先確定需要更新的記錄再哪個分割槽,然後取出資料並更新,再判斷更新後的資料應該再哪個分割槽,最後對底層表進行寫入操作,並對源資料所在的底層表進行刪除操作

​ 有些操作時支援過濾的,例如,當刪除一條記錄時,mysql需要先找到這條記錄,如果where條件恰好和分割槽表示式匹配,就可以將所有不包含這條記錄的分割槽都過濾掉,這對update同樣有效。如果是insert操作,則本身就是只命中乙個分割槽,其他分割槽都會被過濾掉。mysql先確定這條記錄屬於哪個分割槽,再將記錄寫入對應得曾分割槽表,無須對任何其他分割槽進行操作

​ 雖然每個操作都會「先開啟並鎖住所有的底層表」,但這並不是說分割槽表在處理過程中是鎖住全表的,如果儲存引擎能夠自己實現行級鎖,例如innodb,則會在分割槽層釋放對應表鎖。

分割槽表的底層原理

分割槽表由多個相關的底層表實現,這個底層表也是由控制代碼物件標識,我們可以直接訪問各個分割槽。儲存引擎管理分割槽的各個底層表和管理普通表一樣 所有的底層表都必須使用相同的儲存引擎 分割槽表的索引知識在各個底層表上各自加上乙個完全相同的索引。從儲存引擎的角度來看,底層表和普通表沒有任何不同,儲存引擎也...

mysql分割槽表 MySQL分割槽表的正確使用方法

mysql分割槽表概述 我們經常遇到一張表裡面儲存了上億甚至過十億的記錄,這些表裡面儲存了大量的歷史記錄。對於這些歷史資料的清理是乙個非常頭疼事情,由於所有的資料都乙個普通的表裡。所以只能是啟用乙個或多個帶where條件的delete語句去刪除 一般where條件是時間 這對資料庫的造成了很大壓力。...

MySQL分割槽表

分割槽表是一種粗粒度,簡易的索引策略,適用於大資料的過濾場景.最適合的場景是,沒有合適的索引時,對其中幾個分割槽表進行全表掃瞄.或者只有乙個分割槽表和索引是熱點,而且這個分割槽和索引能夠全部儲存在記憶體中.限制單錶分割槽數不要超過150個,並且注意某些導致無法做分割槽過濾的細節,分割槽表對於單條記錄...