mysql表分区实验总结

  

草稿丢失,发表得不完整,稍后重新整理


mysql表分区技术能有效解决水平拆分和垂直拆分的不足,可操作性和效率都更优。以下是一些实验总结。


InnoDB引擎需先在配置文件中设置:,

,主表。par保存分区信息,,和分区数目一致的.MYD文件,用于

,





CREATE TABLE bc (

id INT NOT NULL AUTO_INCREMENT

par_no INT NOT NULL默认& # 39;1 & # 39;,

a_name CHAR (20) NOT NULL,

主键(id、par_no))引擎=MYISAM CHARSET=gbk分区的列表(par_no) (

分区p0值(10年,20年,30),

分区(40、50、60)中的值p1, p2

分区值(70、80100));

[root@master测试]# dir nb * p

nb.frmnb.parnb # # p0.MYD, nb # # p0 p。MYI, nb # P # p1。MYD, nb # P # p1。MYI, nb # # p2 P。MYD, nb # # p2 P。MYI nb # P # p3。MYD, nb # P # p3.MYInb # # p4。MYD nb # P # p4。MYI

提示警告:意思大概mysql分区以后的版本不支持myisam引擎吧,换成innodb就可以了。

警告代码:1287

分区引擎,使用的表& # 39;test.bc& # 39;,弃用,在将来的版本将被删除。请使用本地分区。

散列分区:


CREATE TABLE nb (

id INT NOT NULL AUTO_INCREMENT

par_no INT NOT NULL默认& # 39;1 & # 39;,

a_name CHAR (20) NOT NULL,

主键(id、par_no))=MYISAM引擎CHARSET=gbk分区通过散列(id)

分区5;,,,,,——分区多了个年代,让mysql自动id的散列值存储到5个分区里。


查询分区表中存在的数据量:

选择PARTITION_NAME PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_DESCRIPTION, TABLE_ROWS, SUBPARTITION_NAME, SUBPARTITION_METHOD, SUBPARTITION_EXPRESSION 从information_schema

。分区模式()和TABLE_NAME TABLE_SCHEMA==& # 39; bcd # 39;

 mysql表分区实验总结”> <br/> </p> <p> <br/> </p> <p> <br/> </p> <>之前分区管理——测试总结:
  
  删除分区:
  ALTER  TABLE  tablename  REMOVE  PARTITIONING ,,,,,删除分区定义,所有数据集中到一个表,数据不丢失
  ALTER  TABLE  bc  DROP  PARTITION  p1;,,,,,,,,,,,,删除分区的同时会删除分区中的数据
  
  修改分区:
  ALTER  TABLE  nb  PARTITION  BY 散列(id), PARTITIONS  2,,,,哈希分区重新定义为两个,并会重新分配数据
  
  合并分区
  ALTER  TABLE , bc , REORGANIZE , PARTITION ,, p1, p0  INTO  (, PARTITION  p6  VALUES 拷贝(10年,20年,30、40));,,公元前,将表中的p0, p1分区合并到p6分区,并且p0, p1的(列表)值必须包含在新的分区内,否则不在新区(列表)中的数据会丢失;
  
  ALTER  TABLE  a , REORGANIZE , PARTITION  p0, p1, p2  INTO  (PARTITION  p0  VALUES  LESS  THAN  (500), PARTITION  p1  VALUES  LESS  THAN  maxvalue);,,,重定义分区结构:将范围分区p1, p2合并到p0分区,由于原p2分区是maxvalue值,所以还得同时增加一个新的maxvalue分区,否则报的错。
  
  拆分分区:
  
  
  
  添加分区:
  
  未有分区的情况下:
  ALTER  TABLE  nb  PARTITION  BY 散列(id), PARTITIONS  2,,,用id 列给表分两个散列分区,如果有独特的键,要先删除。
  
  ALTER  TABLE  a , PARTITION  BY 范围(id) (,,,,,,,,,,,, a 表无分区。
  PARTITION  p0 , VALUES  LESS  THAN  (1000),
  PARTITION  p1 , VALUES , LESS  THAN  (2000),
  PARTITION , p2 , VALUES  LESS  THAN , maxvalue)
  --------------------------------------------------------------------
  
  ALTER  TABLE  bc , PARTITION  BY 列表(par_no), (PARTITION  p1 ,,,,,,,,,,,, - - - - -为未定义分区表的BC表添加两个列表分区;
  VALUES (10年,20年,30),拷贝PARTITION  p2  VALUES 拷贝(40、50、60、70、80));
  
  
  已有分区的情况下:
  合并分区:
  ALTER  TABLE  abc , REORGANIZE , PARTITION , p2  INTO  (
  PARTITION  p2  VALUES  LESS  THAN  (6000), PARTITION  p3  VALUES  LESS  THAN  maxvalue);,,,,,,,,,,,,重新定义范围分区p2,并新加一个p3分区,p2分区的值不能小于现有的最大值,且须新境一个包含最大值(执行)的新分区,否则报的错
  
  ALTER  TABLE  bc , ADD  PARTITION , (PARTITION  p3  VALUES 拷贝(20、30));——添加一个列表分区
  
  ALTER  TABLE  nb  ADD  PARTITION  PARTITIONS  2,,,,(散列分区),新加后现有分区里的数据会平滑分摊到新分区,myisam引擎在上面的查询语句中可以体现出来,innodb引擎则计数信息丢失,从0开始重新计数,但表中数据变不会丢失。<h2 class=mysql表分区实验总结