mysql高级:表分区
2016-06-22 22:29
405 查看
所谓分区,就是把一个数据表的文件和索引分散存储在不同的无力文件中。
mysql5.1以上版本才支持分区。
使用如下命令确认版本是否支持分区:
show variables like '%partition%';
Mysql支持的分居类型包括Range、List、Hash、Key,其中Range最常用:
CREATE TABLE foo(
id INT NOT NULL AUTO_INCREMENT,
created DATATIME,
PRIMARY KEY(id, created)
) ENGINE = INNODB PARTITION BY RANGE (TO_DAYS(created)) (
PARTITION foo_1 VALUES LESS THAN (TO_DAYS('2009-01-01')),
PARTITION foo_2 VALUES LESS THAN (TO_DAYS('2010-01-01'))
)
即便创建完分区,也能在后期管理,比如添加一个新的分区,代码如下:
ALTER TABLE foo ADD PARTITION (
PARTITION foo_3 VALUES LESS THAN (TO_DAYS('2011-01-01'))
)
删除一个分区,代码如下:
ALTER TABLE foo DROP PARTITION foo_3;
检索infomation_schema数据库能看到刚刚创建的分区信息,检索方法如下:
SELECT * FROM PARTITIONS WHERE PARTITION_NAME IS NOT NULL
查看数据文件:
SHOW VARIABLES LIKE 'datadir'
应用分区时,通过DATA DIRECTORY和INDEX DIRECTORY选项把不同分区分散到不同磁盘上,可以进一步提高系统的I/O吞吐量。
主键或者唯一索引必须包含分区字段,不过对INNODB来讲,大主键性能不好。
很多时候,使用分区就不要再使用主键,否则可能影响性能。
只能通过INT类型的字段活着返回INT类型的表达式来分区,通常使用YEAR或TO_DAYS等函数(mysql5.6对这个限制开始开放)。
每个表最多1024个分区。不可能无限制扩展分区,而且过度使用分区往往会消耗大量系统内存。
采用分区的表不支持外键,相关的约束逻辑必须通过程序来实现。
分区后,可能会造成索引失效,需要验证分区可行性。
mysql5.1以上版本才支持分区。
使用如下命令确认版本是否支持分区:
show variables like '%partition%';
Mysql支持的分居类型包括Range、List、Hash、Key,其中Range最常用:
CREATE TABLE foo(
id INT NOT NULL AUTO_INCREMENT,
created DATATIME,
PRIMARY KEY(id, created)
) ENGINE = INNODB PARTITION BY RANGE (TO_DAYS(created)) (
PARTITION foo_1 VALUES LESS THAN (TO_DAYS('2009-01-01')),
PARTITION foo_2 VALUES LESS THAN (TO_DAYS('2010-01-01'))
)
即便创建完分区,也能在后期管理,比如添加一个新的分区,代码如下:
ALTER TABLE foo ADD PARTITION (
PARTITION foo_3 VALUES LESS THAN (TO_DAYS('2011-01-01'))
)
删除一个分区,代码如下:
ALTER TABLE foo DROP PARTITION foo_3;
检索infomation_schema数据库能看到刚刚创建的分区信息,检索方法如下:
SELECT * FROM PARTITIONS WHERE PARTITION_NAME IS NOT NULL
查看数据文件:
SHOW VARIABLES LIKE 'datadir'
应用分区时,通过DATA DIRECTORY和INDEX DIRECTORY选项把不同分区分散到不同磁盘上,可以进一步提高系统的I/O吞吐量。
主键或者唯一索引必须包含分区字段,不过对INNODB来讲,大主键性能不好。
很多时候,使用分区就不要再使用主键,否则可能影响性能。
只能通过INT类型的字段活着返回INT类型的表达式来分区,通常使用YEAR或TO_DAYS等函数(mysql5.6对这个限制开始开放)。
每个表最多1024个分区。不可能无限制扩展分区,而且过度使用分区往往会消耗大量系统内存。
采用分区的表不支持外键,相关的约束逻辑必须通过程序来实现。
分区后,可能会造成索引失效,需要验证分区可行性。
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复