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. Android 发送邮件以及定时发送邮件的实现

    本文以腾讯企业邮箱为例,展示如何发送邮件 及相关问题  选择腾讯企业邮箱是因为腾讯企业邮箱一般都是开启了smtp服务 项目地址:https://gitee.com/bimingcong/MySendE ...

  2. 四 分析easyswoole源码(启动服务&Cache组件原理)

    前文提到的在系统设置Cache组件 Cache::getInstance()的时候,会去调用processManager去创建Cache的进程,然后以管道通信的方式进行设置缓存和获取缓存. Cache ...

  3. python 数据库操作类

    #安装PyMySQL:pip3 install PyMySQL   #!/usr/bin/python3   #coding=utf-8   #数据库操作类     from  datetime  i ...

  4. SpringMVC 学习 十一 springMVC控制器向jsp或者别的控制器传递参数的四种方法

    以后的开发,大部分是发送ajax,因此这四种传递参数的方法,并不太常用.作为了解吧 第一种:使用原生 Servlet 在控制器的响应的方法中添加Servlet中的一些作用域:HttpRequestSe ...

  5. SGTtrick

    SGTtrick By 蒟蒻 ldxoiBy\ 蒟蒻\ ldxoiBy 蒟蒻 ldxoi Chapter 1.关于线段树操作的一些分析 我们知道,线段树有两个核心的函数pushdownpushdown ...

  6. C++ MFC棋牌类小游戏day4

    根据昨天的计划,今天开始做下面的内容. 1.鼠标点击事件 2.点击坐标进行处理.(坐标转换) 3.判断选中的位置是否有效. 4.确定选中的棋子,设置棋子的状态和棋子所在坐标的状态. 5.判断移动是否有 ...

  7. 基于UML的毕业选题系统建模研究

    一.基本信息 标题:基于UML的毕业选题系统建模研究 时间:2018 出版源:电脑迷 领域分类:UML建模技术 二.研究背景 问题定义:为了加强学生设计分析开发软件的相关能力,有效避免结构化模型存在的 ...

  8. SQL Server CTE 递归查询全解 -- 转 学习

    在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...

  9. 机器学习随笔01 - k近邻算法

    算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. ...

  10. nova scheduler filters 配置

    scheduler_driver = nova.scheduler.filter_scheduler.FilterScheduler scheduler_default_filters = Avail ...