0、整理表空间碎片
optimize table tablename

1、表分区按年分区,季度子分区

alter table key_part
partition by range(year(create_time))
subpartition by hash(quarter(create_time))
subpartitions 4 (
partition p0 values less than (2015),
partition p2015 values less than (2016),
partition p2016 values less than (2017),
partition p2017 values less than (2018),
partition p2018 values less than (2019),
partition p1 values less than maxvalue
);

总共产生24个分区,1年4个季度,6年24个季度。

2、按照天分区月表
create_time支持如下日期格式:
%Y-%c-%d
%Y-%c-%d %h:%i:%s

alter table aa
partition by range (to_days(create_time)) (
partition p01 values less than (to_days('2018-04-01')) engine = innodb,
partition p02 values less than (to_days('2018-04-02')) engine = innodb,
partition p03 values less than (to_days('2018-04-03')) engine = innodb,
partition p04 values less than (to_days('2018-04-04')) engine = innodb,
partition p05 values less than (to_days('2018-04-05')) engine = innodb,
partition p06 values less than (to_days('2018-04-06')) engine = innodb,
partition p07 values less than (to_days('2018-04-07')) engine = innodb,
partition p08 values less than (to_days('2018-04-08')) engine = innodb,
partition p09 values less than (to_days('2018-04-09')) engine = innodb,
partition p10 values less than MAXVALUE engine = innodb
);

explain partitions select * from key_part where create_time>='2018-04-12' and create_time<='2018-04-15'

可以看到只遍历了4个分区表,只扫描了4行,而不是扫描所有的行。

explain partitions select * from key_part where create_time>='2018-04-27'

可以看到只遍历了5个分区表,只扫描了5行,而不是扫描所有的行。

3、按照年分区表

alter table user partition by linear hash(year(create_time)) partitions 12;

在5.7版本之前,对于data和datetime类型的列,如果要实现分区裁剪,只能使用year() 和to_days()函数,在5.7版本中,又新增了to_seconds()函数。

4、MYSQL的分区字段,必须包含在主键字段内或唯一索引内

这是因为表分区时,分区字段必须包含在主键字段内或唯一索引内,一张表只能有一个主键或一个唯一索引,主键和唯一索引不能同时存在

CREATE TABLE `key_part` (
`news_id` int(11) NOT NULL COMMENT '新闻id',
`content` varchar(1000) NOT NULL DEFAULT '' COMMENT '新闻内容',
`u_id` varchar(25) NOT NULL DEFAULT '' COMMENT '来源ip',
`create_time` datetime NOT NULL COMMENT '时间',
PRIMARY KEY (`u_id`,`create_time`),
KEY `create_time` (`create_time`) USING BTREE,
KEY `aa` (`news_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50500 PARTITION BY RANGE COLUMNS(create_time)
(PARTITION p01 VALUES LESS THAN ('2018-01-01') ENGINE = InnoDB,
PARTITION p02 VALUES LESS THAN ('2018-03-01') ENGINE = InnoDB,
PARTITION p03 VALUES LESS THAN ('2018-05-01') ENGINE = InnoDB,
PARTITION p04 VALUES LESS THAN ('2018-07-01') ENGINE = InnoDB,
PARTITION p05 VALUES LESS THAN ('2018-09-01') ENGINE = InnoDB,
PARTITION p06 VALUES LESS THAN ('2018-11-01') ENGINE = InnoDB,
PARTITION p07 VALUES LESS THAN ('2019-01-01') ENGINE = InnoDB,
PARTITION p08 VALUES LESS THAN ('2020-01-01') ENGINE = InnoDB,
PARTITION p09 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */;

5、Columns分区

alter table key_part
partition by range columns(create_time) (
partition p01 values less than ('2018-01-01') engine = innodb,
partition p02 values less than ('2018-03-01') engine = innodb,
partition p03 values less than ('2018-05-01') engine = innodb,
partition p04 values less than ('2018-07-01') engine = innodb,
partition p05 values less than ('2018-09-01') engine = innodb,
partition p06 values less than ('2018-11-01') engine = innodb,
partition p07 values less than ('2019-01-01') engine = innodb,
partition p08 values less than ('2020-01-01') engine = innodb,
partition p09 values less than maxvalue engine = innodb
);

6、添加表分区

-- 对表重新表分区
alter table lot_order_aa partition by range columns(create_time)(partition p03 values less than ('2018-03-01')); -- 在已有分区的表上,添加表分区
alter table lot_order_aa add partition (partition p05 values less than ('2018-05-01'));

mysql表分区案例的更多相关文章

  1. MySQL表分区技术

    MySQL表分区技术 MySQL有4种分区类型: 1.RANGE 分区 - 连续区间的分区 - 基于属于一个给定连续区间的列值,把多行分配给分区: 2.LIST 分区 - 离散区间的分区 - 类似于按 ...

  2. Mysql 表分区和性能

    以下内容节选自<Mysql技术内幕InnoDB存储引擎> mysql表分区: 分区功能并不是所有存储引擎都支持的,如CSV.MERGE等就不支持.mysql数据库支持的分区类型为水平分区( ...

  3. Mysql表分区的选择与实践小结

    在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快.这时候可能就需要通过分库,分表,分区来解决这些性能瓶颈. 一. 选择合适的解决方法 1. 分库分表. 分库 ...

  4. Mysql 表分区

    是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...

  5. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  6. mysql表分区(摘自 MySQL表的四种分区类型)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  7. MySQL表分区

    MySQL的表分区 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以 ...

  8. mysql表分区、查看分区

    原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设 ...

  9. MYSQL 表分区的 3 方法

    背景知识: 表分区是把逻辑上同一范围的数据保存到同一个文件中,就和超市一样,把同类商品放在同一个区域,把不同的商品放在不同的地方.不同的是超市中 是根据用途分类的,表分区是根据它的取值区间来分的. 分 ...

随机推荐

  1. win10安装MongoDB提示 the domain,user name and/or password are incorrect. Remember to use "." for the domain if the account is on the local machine.

    好心塞,提示输入不合法. 后来发现这样可以解决.退出安装.重新打开()因为我第一次打开时是没有卡在这一步的,只不过返回上一页时就一直卡在验证的页面了),默认,默认,默认,

  2. Could not transfer artifact org.springframework

    无法从中心仓库获取该版本的信息, 从新下载: 1.配置eclipse中的maven  user setting路径为本地maven安装路径 配置阿里云镜像路径 <mirror> <i ...

  3. playframework 一步一步来 之 日志(一)

    日志模块是一个系统中必不可少的一部分,它可以帮助我们写程序的时候查看错误信息,利于调试和维护,在业务面,它也可以记录系统的一些关键性的操作,便于系统信息的监控和追踪. play的日志是基于logbac ...

  4. .net core 中使用ef 访问mysql

    1.参考文档说修改项目文件添加,就得这么做,不然会报错 <ItemGroup> <DotNetCliToolReference Include="Microsoft.Ent ...

  5. python3 第二十三章 - 函数式编程之Partial function(偏函数)

    要注意,这里的偏函数和数学意义上的偏函数不一样,偏函数是2.5版本以后引进来的东西,属于函数式编程的一部分.前面章节中我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点. ...

  6. .Net 常用插件及第三方库

    .Net 常用插件及第三方库 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址: ...

  7. zigbee3.0的协议特性

    ZigBee协议有如下特性: 支持多种网络拓扑,比如点对点,点对多点,自组网: 低工作占空比能力,提供长电池供电的可能: 低延迟: 采用DSSS扩频技术: 每个网络最高可支持65,000节点 128- ...

  8. LOJ-10103(求删去割点后最多的连通分量)

    题目链接:传送门 思路: (1)这道题的图可能不连通,所以需要多次Tarjan: (2)设置cut[i]=x数组表示第i个节点被删除后右多少个子图(这个只是在一个图中),如果是根节点就要-1,因为根节 ...

  9. vue报错TypeError: Cannot read property '$createElement' of undefined

    报错截图: 这个错误就是路由上的component写成了components

  10. c++类对象的内存分布

    要想知道c++类对象的内存布局, 可以有多种方式,比如: 1)输出成员变量的偏移, 通过offsetof宏来得到 2)通过调试器查看, 比如常用的VS 1.没有数据成员的对象 class A{ }; ...