隔着屏幕轻易产生感情的你,肯定很孤独吧。

最近搞了搞分区表。使用比较粗浅,先行记录一下
何为分区?
我的理解是普通分表的另外一种替代,易于后期扩展维护,主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的
主要分为水平和垂直分区。这个看业务,这次用的就是水平分区
分区类型:常用是Range的分区,其余的还有list、hash、key分区
这次介绍的比较浅,因为目前只是初级的使用

CREATE TABLE IF NOT EXISTS `t_user_extend` (
    `id`           bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `identity`     bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT 'ddlid',
    `last_opt_t`   int(11) unsigned NOT NULL DEFAULT 0 COMMENT '最后一次操作时间(登录)',
    `cold_sed_t`   int(11) unsigned NOT NULL DEFAULT 0 COMMENT '冷降时间,只保存最后一次的时间',
    `device_type`  varchar(100) NOT NULL DEFAULT '' COMMENT '当前登录设备的类型',
    `sync_learn_1` LongText COMMENT '同步学语文记录',
    `sync_learn_2` LongText COMMENT '同步学数学记录',
    `sync_learn_3` LongText COMMENT '同步学英语记录',
    `sync_learn_topics_history` LongText COMMENT '历史学习过的同步学题目',
    `sync_learn_topics_mistake` LongText COMMENT '历史错误过的题目',
    `sync_learn_topics_course_report_card` LongText COMMENT '成绩单',
    `sync_learn_topics_report_card` LongText COMMENT '成绩单',
    `gm_mail_info`   LongText COMMENT '',
    `new_user_info`  LongText COMMENT '用户信息',
    `sign_in_info`   LongText COMMENT '签到数据',
    `extend`         LongText COMMENT '未来可能需要的扩展信息',
    PRIMARY KEY (`id`, `identity`)) PARTITION BY RANGE(`identity`)  (
    PARTITION p0 VALUES LESS THAN (3000000),
    PARTITION p1 VALUES LESS THAN (6000000),
    PARTITION p2 VALUES LESS THAN (9000000),
    PARTITION p3 VALUES LESS THAN (12000000),
    PARTITION p4 VALUES LESS THAN (15000000),
    PARTITION p5 VALUES LESS THAN (18000000),
    PARTITION p6 VALUES LESS THAN (21000000),
    PARTITION p7 VALUES LESS THAN (24000000),
    PARTITION p8 VALUES LESS THAN (27000000),
    PARTITION p9 VALUES LESS THAN (30000000),
    PARTITION others VALUES LESS THAN (MAXVALUE)
    );

我们可以看到核心是后面的部分,使用表中的一个字段进行分区,常见的是按照年月,我们这里使用的是用户id。
注意这里省略了设置分区数量的写法 PARTITION BY RANGE(`identity`) PARTITIONS 10 。。。。。。
因为可能不利于后续的扩展,因为如果固定了数量,后续扩展会报错
建表完成后,我们可以用下

show create table t_user_extend;

瞅瞅你建的表,肯定是innodb类型的。
也可以使用

select 
  partition_name part,  
  partition_expression expr,  
  partition_description descr,  
  table_rows  
from information_schema.partitions  where 
  table_schema = schema()  
  and table_name='t_user_extend';

瞅瞅你的每个分区存储了多少个数据。
分区操作,以后再说,目前感受不深

溜了溜了

分类: MySQL

0 条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据