分割槽表的底層原理

2021-10-04 19:47:22 字數 933 閱讀 1700

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

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

select查詢

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

insert操作

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

delete操作

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

update操作

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

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

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

mysql分割槽表的底層原理

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

把非分割槽表改為分割槽表

把非分割槽表改為分割槽表 說明 把非分割槽表改為分割槽表適用於歷史表 1 建立分割槽表 結構和非分割槽表tbl stock balance log相同 createtabletbl stock balance log part1 account id varchar2 20 byte occur d...

hive 分割槽表 Hive的DDL分割槽表建立

1.單分割槽表 建立表t user,指定分割槽hive xiaoliu create table t user id int,name string partitioned by country string row format delimited fields terminated by xia...