分割槽表是一種粗粒度,簡易的索引策略,適用於大資料的過濾場景.最適合的場景是,沒有合適的索引時,對其中幾個分割槽表進行全表掃瞄.或者只有乙個分割槽表和索引是熱點,而且這個分割槽和索引能夠全部儲存在記憶體中.限制單錶分割槽數不要超過150個,並且注意某些導致無法做分割槽過濾的細節,分割槽表對於單條記錄的查詢沒有優勢,需要注意這類查詢的效能.
分割槽表語法
分割槽表分為range,list,hash,key四種型別,並且分割槽表的索引是可以區域性針對分割槽表建立的
建立分割槽表
create這段語句表示將表內資料按照order_dy的年份範圍進行分割槽,2023年乙個區,2011乙個,2012乙個,剩下的乙個.table
sales (
id intauto_increment,
amount
double
notnull
, order_day
datetime
notnull
,
primary
key(id, order_day)
) engine
=innodb partition by range(year
(order_day)) (
partition p_2010
values less than (2010
), partition p_2011
values less than (2011
), partition p_2012
values less than (2012
), partition p_catchall
values less than maxvalue);
要注意如果這麼做,則order_day必須包含在主鍵中,且會產生乙個問題,就是當年份超過閾值,到了2013,2014時,需要手動建立這些分割槽
替代方法就是使用hash
create這種分割槽表示每100w條資料建立乙個分割槽,且沒有閾值範圍的影響table
sales (
id intprimary
keyauto_increment,
amount
double
notnull
, order_day
datetime
notnull
) engine
=innodb partition by hash(id div 1000000);
對於大資料而言
對於大資料(如10tb)而言,索引起到的作用相對小,因為索引的空間與維護成本很高,另外如果不是索引覆蓋查詢,將導致回表,造成大量磁碟io.那麼對於這種情況的解決策略是:
1.全量掃瞄資料,不要任何索引
通過分割槽表表示式將資料定位在少量的分割槽表,然後正常訪問這些分割槽表的資料
2.分離熱點,索引資料
將熱點資料分離出來在乙個小的分割槽,並對分割槽建立索引,對熱點資料的查詢提高效率.
分割槽表的問題
1.null值使分割槽過濾無效
假設按照range year(order_date)分割槽,那麼如果這個表示式計算出來的時null值,記錄就會被存放到第乙個分割槽.所以在查詢時加入查詢條件有可能出現null值,那麼就會去檢查第乙個分割槽.解決的方法可以是將第乙個分割槽建立為null分割槽 partition p_nulls values less than (0),或者在mysql5.5以後,直接使用column建立分割槽 partition by range columns(order_date)
2. 選擇分割槽的成本
每插入一行資料都需要按照表示式篩選插入的分割槽位址
3. 分割槽列和索引列不匹配
如果索引列和分割槽列不匹配,且查詢中沒有包含過濾分割槽的條件,會導致無法進行分割槽過濾,那麼將會導致查詢所有分割槽.
4. 開啟並鎖住所有底層表
分割槽表的的查詢策略是在分割槽過濾之前,開啟並鎖住所有底層表,這會造成額外的開銷,解決問題的方法是盡量使用批量操作,例如load data infile,或者一次刪除多行資料.
過濾分割槽表的要點
過濾分割槽表的where條件必須是切分分割槽表的列,而不能帶有函式,例如只能是order_day,而不能是year(order_day)
mysql分割槽邊 mysql分割槽
檢視資料庫版本是否支援分割槽 分割槽的四種型別 range分割槽 範圍分割槽,根據某個欄位的值來進行分割槽,某個連續的區間來進行區分 建立表時分區create table teacher id varchar 20 not null name varchar 20 age varchar 20 bi...
mysql 分表分割槽小記 二
舉個列子利用merge儲存引擎來實現分表 資料表1450w資料進行八張表拆分 花費時間大概6分鐘左右 1.建立八張分表 systemlog1,systemlog2,systemlog3,systemlog4.2.把資料根據主鍵範圍塞入分表中 insert into systemlog1 system...
MySQL 分割槽key MySQL KEY分割槽
介紹 key分割槽和hash分割槽相似,但是key分割槽支援除text和blob之外的所有資料型別的分割槽,而hash分割槽只支援數字分割槽,key分割槽不允許使用使用者自定義的表示式進行分割槽,key分割槽使用系統提供的hash函式進行分割槽。當表中存在主鍵或者唯一鍵時,如果建立key分割槽時沒有...