mysql分割槽 二

2021-07-11 23:37:19 字數 2233 閱讀 2641

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

分割槽表語法

分割槽表分為range,list,hash,key四種型別,並且分割槽表的索引是可以區域性針對分割槽表建立的

建立分割槽表

create

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_dy的年份範圍進行分割槽,2023年乙個區,2011乙個,2012乙個,剩下的乙個.

要注意如果這麼做,則order_day必須包含在主鍵中,且會產生乙個問題,就是當年份超過閾值,到了2013,2014時,需要手動建立這些分割槽

替代方法就是使用hash

create

table

sales (

id intprimary

keyauto_increment,

amount

double

notnull

, order_day

datetime

notnull

) engine

=innodb partition by hash(id div 1000000);

這種分割槽表示每100w條資料建立乙個分割槽,且沒有閾值範圍的影響

對於大資料而言

對於大資料(如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分割槽時沒有...