Mysql表分割槽實現

2021-09-17 04:52:07 字數 3464 閱讀 1634

(一)、分割槽的限制:

1.主鍵或者唯一索引必須包含分割槽字段,如primary key (id,username),不過innodb的大組建效能不好。

2.很多時候,使用分割槽就不要在使用主鍵了,否則可能影響效能。

3.只能通過int型別的字段或者返回int型別的表示式來分割槽,通常使用year或者to_days等函式(mysql 5.6 對限制開始放開了)。

4.每個表最多1024個分割槽,而且多分割槽會大量消耗記憶體。

5.分割槽的表不支援外來鍵,相關的邏輯約束需要使用程式來實現。

6.分割槽後,可能會造成索引失效,需要驗證分割槽可行性。

(二)、分割槽實現:

第一步:新增日期作為主鍵部分

alter table erp_bill_index drop primary key;-- 刪除主鍵 201s

alter table erp_bill_index add primary key(billid,billdate);-- 新增主鍵203s

第二步:建立分割槽

alter table erp_bill_index partition by range(to_days(billdate))

( partition p201801 values less than (to_days('2018-02-01')),

partition p201802 values less than (to_days('2018-03-01')),

partition p201803 values less than (to_days('2018-04-01')),

partition p201804 values less than (to_days('2018-05-01')),

partition p201805 values less than (to_days('2018-06-01')),

partition p201806 values less than (to_days('2018-07-01')),

partition p201807 values less than (to_days('2018-08-01')),

partition p201808 values less than (to_days('2018-09-01')),

partition p201809 values less than (to_days('2018-10-01')),

partition p201810 values less than (to_days('2018-11-01')),

partition p201811 values less than (to_days('2018-12-01')),

partition p201812 values less than (to_days('2019-01-01')),

partition p201901 values less than (to_days('2019-02-01')),

partition p201902 values less than (to_days('2019-03-01')),

partition p201903 values less than (to_days('2019-04-01')),

partition p201904 values less maxvalue

);

第三步:新增分割槽alter table erp_bill_index add partition

(partition p201905 values less than (to_days(『2019-06-01』)) engine = innodb

)第四部步:自動新增分割槽

delimiter katex parse error: expected 'eof', got '#' at position 2: #̲該錶所在資料庫名稱 use `…

drop procedure if existscreate_partition_by_monthkatex parse error: expected 'eof', got '#' at position 110: …64)) begin #̲當前日期存在的分割槽的個數 …

delimiter ;

第五步:定時任務

delimiter katex parse error: expected 'eof', got '#' at position 2: #̲該錶所在的資料庫名稱 use …

create event if not existsmonth_generate_partition

on schedule every 1 month #執行週期,還有天、月等等

starts 『2019-04-01 00:00:00』

on completion preserve

enable

comment 『creating partitions』

do begin

#呼叫剛才建立的儲存過程,第乙個引數是資料庫名稱,第二個引數是表名稱

call testtable.create_partition_by_month(『testtable』,『erp_bill_index』);

end$$

delimiter ;

(三)、處理定時任務不執行問題:

show variables like 『event_scheduler』

set global event_scheduler = 1;

開啟事件:

alter event event_name on completion preserve enable; /event_name 事件名稱/

相應檔案

c:\programdata\mysql\mysql server 5.7\my.ini skip-grant-tables

(四)、問題整理

1)、錯誤:table has no partition for value 738059(沒有包含所有資料)

先查詢最大值

select billdate from erp_bill_index where billdate>『2019-05-01』 order by billdate desc limit 0,20;

在新增最大分割槽;

2)、建立分割槽之後,查詢時解析可以看到使用分割槽情況:

explain

select billdate from erp_bill_index_test where billdate>『2019-05-01』 order by billdate desc limit 0,20;

以上步驟執行完成,表分割槽就實現了,如果出現問題大家可以相互**交流,相互學習~

Mysql表分割槽實現

一 分割槽的限制 1.主鍵或者唯一索引必須包含分割槽字段,如primary key id,username 不過innodb的大組建效能不好。2.很多時候,使用分割槽就不要在使用主鍵了,否則可能影響效能。3.只能通過int型別的字段或者返回int型別的表示式來分割槽,通常使用year或者to day...

mysql表分割槽全文搜尋 Mysql表分割槽

什麼時候使用分割槽 海量資料 資料表索引大於伺服器有效記憶體 分割槽的限制 大部分只能對資料表的整型列進行分割槽,或者資料列可以通過分割槽函式轉化成整型列 其中columns支援 integer string date datetime型別 最大分割槽數目不能超過1024 如果含有唯一索引或者主鍵,...

mysql表分割槽

表分割槽的優點 查詢優化 缺點 除了資料庫管理方面複雜了點,其它的還沒有發現 只有5.1及之後的版本才支付分割槽,同時5.1中分割槽的一些維護的工具還不完善 mysql目前四種分割槽 1range 根據某個列的某種運算進行分割槽,分割槽的標誌都是該列的某種運算後的連續區間 create table ...