jackyrar 发表于 2018-10-1 15:28:33

mysql表分区实验总结

分区管理--测试总结:  

  
删除分区:
  
ALTER TABLE tablename REMOVE PARTITIONING ; --删除分区定义,所有数据集中到一个表,数据不丢失
  
ALTER TABLE bc DROP PARTITION p1;         --删除分区的同时会删除分区中的数据
  

  
修改分区:
  
ALTER TABLE nb PARTITION BY HASH(id) PARTITIONS 2;--Hash分区重新定义为两个,并会重新分配数据
  

  
合并分区
  
ALTER TABLEbcREORGANIZEPARTITION   p1,p0 INTO ( PARTITION p6 VALUES IN (10,20,30,40));--将BC表中的p0,p1分区合并到p6分区,并且p0,p1的
值必须包含在新的分区内,否则不在新区
中的数据会丢失;
  

  
ALTER TABLE aREORGANIZEPARTITION p0,p1,p2 INTO (PARTITION p0 VALUES LESS THAN (500),PARTITION p1 VALUES LESS THAN maxvalue);--重定义分区结构:将Range分区p1,p2合并到p0分区,由于原p2分区是maxvalue值,所以还得同时增加一个新的maxvalue分区,否则报错。
  

  
拆分分区:
  

  

  

  
添加分区:
  

  
未有分区的情况下:
  
ALTER TABLE nb PARTITION BY HASH(id) PARTITIONS 2; --用id 列给表分两个hash分区;如果有unique键,要先删除.
  

  
ALTER TABLE aPARTITION BY RANGE(id)(            --a 表无分区.
  
PARTITION p0VALUES LESS THAN (1000),
  
PARTITION p1VALUESLESS THAN (2000),
  
PARTITIONp2VALUES LESS THANmaxvalue)
  
--------------------------------------------------------------------
  

  
ALTER TABLE bcPARTITION BY LIST(par_no) (PARTITION p1             ----为未定义分区表的BC表添加两个list分区;
  
VALUES IN (10,20,30),PARTITION p2 VALUES IN (40,50,60,70,80));
  

  

  
已有分区的情况下:
  
合并分区:
  
ALTER TABLE abcREORGANIZEPARTITIONp2 INTO (
  
PARTITION p2 VALUES LESS THAN (6000),PARTITION p3 VALUES LESS THAN maxvalue);         --重新定义Range分区p2,并新加一个p3分区,p2分区的值不能小于现有的最大值,且须新境一个包含最大值(Maxvalue)的新分区,否则报错
  

  
ALTER TABLE bcADD PARTITION(PARTITION p3 VALUES IN (20,30));--添加一个list分区
  

  
ALTER TABLE nb ADD PARTITION PARTITIONS 2;--(Hash分区),新加后现有分区里的数据会平滑分摊到新分区,myisam引擎在上面的查询语句中可以体现出来,innodb引擎则计数信息丢失,从0开始重新计数,但表中数据变不会丢失.


页: [1]
查看完整版本: mysql表分区实验总结