Mysql創建分區

MySQL創建分區總結:

我們項目中用的分區,大部分都是按時間字段去進行分區,如果是沒有數據的表,我們可以重建了,而如果有數據的話只能建臨時表,在臨時表中建好分區,再用select into到臨時表,或者先從原表導出數據重建表,等建好分區再導入也可以,下面是用臨時表的方法:

-- 創建一張與cnzz_count樣的臨時表temp_cnzz_count,把要分區的字段也設置爲主鍵
-- 並在臨時表分區,執行下列語句時會把已建好的分區重建
alter table temp_cnzz_count partition by range(to_days(data_time))
(
partition p20150601 values less than (to_days('2015-06-01')),
partition p20150602 values less than (to_days('2015-06-02')),
partition p20150603 values less than (to_days('2015-06-03')),
partition p20150604 values less than (to_days('2015-06-04')),
partition p20150605 values less than (to_days('2015-06-05')),
partition p20150606 values less than (to_days('2015-06-06'))
);
select count(*) from cnzz_count
-- 查看分區
SELECT * FROM information_schema.PARTITIONS WHERE table_name='temp_cnzz_count';
-- 如果數據不大可以考慮用下面的語句把主表數據複製到臨時表
Insert into temp_cnzz_count select * from cnzz_count;

select count(*) from temp_cnzz_count
-- 複製完數據後,把主表刪除了,把臨時表重命名爲主表的名字就OK了temp_cnzz_count
-- 用下面的語句測試查詢是否走分區,如果有,則分區成功
EXPLAIN partitions select * from temp_cnzz_count where data_time = '2015-05-20'

-- 查看錶中的分區

SELECT * FROM information_schema.PARTITIONS WHERE table_name='cnzz_count';


當我們想給已經分區好的表中加入一個分區時,用下面語句

-- 新增分區(注意:不能在最新的分區前面加分區,只能加入到最新的後面)
ALTER TABLE cnzz_count ADD PARTITION (PARTITION p20150524 VALUES LESS THAN (to_days('2015-05-24')))


當然我們要用list創建分區可以如下寫法:

alter table site_temp partition by list(first_trade_id)
(
partition s0 values in (-1),
partition s1 values in (1),
partition s2 values in (2),
partition s3 values in (3),
partition s4 values in (4),
partition s5 values in (5)

);


發佈了44 篇原創文章 · 獲贊 23 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章