您的位置:首页 > 数据库 > MySQL

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个分区。不可能无限制扩展分区,而且过度使用分区往往会消耗大量系统内存。

采用分区的表不支持外键,相关的约束逻辑必须通过程序来实现。

分区后,可能会造成索引失效,需要验证分区可行性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 表分区