MySQL 5 6分割槽表 入門例子講解

2021-07-08 13:51:14 字數 2050 閱讀 6467

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

分割槽表語法

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

建立分割槽表

create table sales (

id int auto_increment,

amount double not null,

order_day datetime not null,

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 int primary key auto_increment,

amount double not null,

order_day datetime not null

) 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 5 6分割槽維護

mysql 5.6分割槽維護 表和分割槽的一些維護任務,適用於在mysql5.6的分割槽表上用sql語句進行。維護分割槽表,可以使用支援分割槽表的語句 check table,optimize table,analyze table,and repair table 你可以使用alter table...

mysql 5 6 分割槽 四 分割槽和鎖定

在mysql 5.6.5及更早版本中,對於 myisam執行dml或ddl語句時,實際執行表級鎖的 儲存引擎 影響分割槽表的這種語句對整個 施加了鎖定 也就是說,所有分割槽都被鎖定,直到語句完成。mysql 5.6.6實現 分割槽鎖定修剪 這在許多情況下消除了不必要的鎖定。在mysql 5.6.6及...

mysql分割槽表簡單例子

mysql分表可以有三種辦法實現 1.直接物理表實現分割槽 主要由程式控制 2.通過merge儲存引擎 3.通過分割槽字段進行分割槽 當然也可以通過上面3種方式進行自由組合 下面的例子說的是第三種 分割槽表 a 建立分割槽表 create table test log id bigint 20 no...