这里是我自己整理的一些资料,大家不懂的可以相互学习呀。。。

MySQL 分区

Mysql ZZT 1686次浏览 已收录 0个评论

理解

  1. mysql分区优化主要是水平分区
  2. 水平分区的主要方式是list和rang(还有hash,key)
  3. myisam的水平分区中,物理文件myi对应索引文件,myd对应数据文件
  4. innodb默认水平分区是不会将数据文件分开存放,要先设置my.cnf中的innodb_file_per_table=1重启mysql后才会将数据文件分开存放。
  5. mysql水平分区后进行查询的时候带上分区条件的字段会提高查询效率,不用全表扫描。带索引的同理。

应用

创建mysql分区

ALTER TABLE tbl_rtdata PARTITION BY RANGE (Month(fld_date))
(   
PARTITION p_Apr VALUES LESS THAN (TO_DAYS('2012-05-01')),
PARTITION p_May VALUES LESS THAN (TO_DAYS('2012-06-01')), 
PARTITION p_Dec VALUES LESS THAN MAXVALUE );

合并分区

ALTER TABLE t5
REORGANIZE PARTITION p3,p4 INTO
(PARTITION p1 VALUES LESS THAN (TO_DAYS('2014-01-06'))
)

删除表的所有分区

ALTER TABLE t5 REMOVE PARTITIONING;  #不会丢失数据,表分变成普通表

重新定义分区

ALTER TABLE t5
PARTITION BY RANGE (TO_DAYS(dt)) 

(
    PARTITION p0 VALUES LESS THAN (TO_DAYS('2014-01-01')),
    PARTITION p1 VALUES LESS THAN (TO_DAYS('2014-07-01')),
    PARTITION p2 VALUES LESS THAN MAXVALUE

);

ALTER TABLE t8 PARTITION BY HASH(MONTH(dt)) PARTITIONS 4;


重建分区:

这和先删除保存在分区中的所有记录,然后重新插入它们,具有同样的效果。它可用于整理分区碎片。

ALTER TABLE t5 REBUILD PARTITION p0, p1;

优化分区:

如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHAR,BLOB,或TEXT类型的列)作了许多修改,可以使用“ALTER TABLE ... OPTIMIZE PARTITION”来收回没有使用的空间,并整理分区数据文件的碎片。

ALTER TABLE t5 OPTIMIZE PARTITION p0, p1;

分析分区:

读取并保存分区的键分布。

ALTER TABLE t5 ANALYZE PARTITION p1;

修复分区:

修复损坏的分区。

ALTER TABLE t5 REPAIR PARTITION p0,p1;

检查分区:

ALTER TABLE t5 CHECK PARTITION all;

截断分区

ALTER TABLE t5 TRUNCATE PARTITION p1;

置换分区

将指定分区的记录置换到普通表中,普通表的定义应该与分区表相同,包括约束、索引等

ALTER TABLE t5 exchange PARTITION p0 WITH TABLE t15;

查看mysql分区

SELECT
  partition_name part, 
  partition_expression expr, 
  partition_description descr, 
  table_rows 
FROM
  INFORMATION_SCHEMA.partitions 
WHERE
  TABLE_SCHEMA = schema() 
  AND TABLE_NAME='table'; 

乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MySQL 分区
喜欢 (0)

文章评论已关闭!