理解
- mysql分区优化主要是水平分区
- 水平分区的主要方式是list和rang(还有hash,key)
- myisam的水平分区中,物理文件myi对应索引文件,myd对应数据文件
- innodb默认水平分区是不会将数据文件分开存放,要先设置my.cnf中的innodb_file_per_table=1重启mysql后才会将数据文件分开存放。
- 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';