mysql高级:表分区

所谓分区,就是把一个数据表的文件和索引分散存储在不同的无力文件中。
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个分区。不可能无限制扩展分区,而且过度使用分区往往会消耗大量系统内存。
采用分区的表不支持外键,相关的约束逻辑必须通过程序来实现。
分区后,可能会造成索引失效,需要验证分区可行性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值