mysql表分区案例

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 (to_days(‘2018-04-10‘)) engine = innodb,
    partition p11 values less than (to_days(‘2018-04-11‘)) engine = innodb,
    partition p12 values less than (to_days(‘2018-04-12‘)) engine = innodb,
    partition p13 values less than (to_days(‘2018-04-13‘)) engine = innodb,
    partition p14 values less than (to_days(‘2018-04-14‘)) engine = innodb,
    partition p15 values less than (to_days(‘2018-04-15‘)) engine = innodb,
    partition p16 values less than (to_days(‘2018-04-16‘)) engine = innodb,
    partition p17 values less than (to_days(‘2018-04-17‘)) engine = innodb,
    partition p18 values less than (to_days(‘2018-04-18‘)) engine = innodb,
    partition p19 values less than (to_days(‘2018-04-19‘)) engine = innodb,
    partition p20 values less than (to_days(‘2018-04-20‘)) engine = innodb,
    partition p21 values less than (to_days(‘2018-04-21‘)) engine = innodb,
    partition p22 values less than (to_days(‘2018-04-22‘)) engine = innodb,
    partition p23 values less than (to_days(‘2018-04-23‘)) engine = innodb,
    partition p24 values less than (to_days(‘2018-04-24‘)) engine = innodb,
    partition p25 values less than (to_days(‘2018-04-25‘)) engine = innodb,
    partition p26 values less than (to_days(‘2018-04-26‘)) engine = innodb,
    partition p27 values less than (to_days(‘2018-04-27‘)) engine = innodb,
    partition p28 values less than (to_days(‘2018-04-28‘)) engine = innodb,
    partition p29 values less than (to_days(‘2018-04-29‘)) engine = innodb,
    partition p30 values less than (to_days(‘2018-04-30‘)) engine = innodb,
    partition p31 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行,而不是扫描所有的行。

原文地址:https://www.cnblogs.com/linjiqin/p/9127012.html

时间: 2024-11-11 11:37:23

mysql表分区案例的相关文章

查看Mysql表分区语句

SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA.partitions WHERE TABLE_SCHEMA = schema() AND TABLE_NAME='table'; 查看Mysql表分区语句

Mysql 表分区和性能

以下内容节选自<Mysql技术内幕InnoDB存储引擎> mysql表分区: 分区功能并不是所有存储引擎都支持的,如CSV.MERGE等就不支持.mysql数据库支持的分区类型为水平分区(指一张表中不同行的记录分配到不同的物理文件中),不支持垂直分区(指将同一表中的不同列分配到不同的物理文件中).此外,mysql数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引. 当前Mysql数据库支持以下几种类型的分区: Range分区:行数据基于一个给定连续区间的列值放入分区.Mysql数据

MySql表分区(根据时间datetime)

timestamp 类型分区请移步=>MySql表分区(根据时间timestamp)环境: MySql8.0.18(5.6和5.7的未验证) 分区条件的字段类型是datetime完整的sql操作表分区的语句如下: -- 1.删除表 drop table t_test; -- =================================================================================== -- 2.创建一个表并对其分区,被创建分区的字段必须为主

mysql表分区、查看分区

原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的. MYSQL的分区主要有两种形式:水平分区和垂直分区 水平分区(HorizontalPartitioning) 这种形式的分区是对根据表的行进行

MYSQL 表分区的 3 方法

背景知识: 表分区是把逻辑上同一范围的数据保存到同一个文件中,就和超市一样,把同类商品放在同一个区域,把不同的商品放在不同的地方.不同的是超市中 是根据用途分类的,表分区是根据它的取值区间来分的. 分区有什么用? 1.分区后可以用多个文件来保存表中的数据,而这几个文件可以位于不同的硬盘上,这样就可以同时利用多个硬盘的IO能力. 2.分区后锁就会更灵活,如果一次要锁定大量的数据行,而表没有分区,MYSQL 可能会为了减小在锁上的开销,会把行锁升 级为表锁,如果表分区了,要访问的数据行只在表的一两个

mysql 表分区技术

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分.从逻辑上看,只有一张表,但是底层却是由多个物理分区组成. 表分区有什么好处: a.分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备. b.和单个磁盘或者文件系统相比,可以存储更多数据 c.优化查询.在where语句中包含分区条件时,可以只扫描一个或多个分区表来提高查询效率:涉及sum和count语句时,也可以在多个分区上并行处理,最后汇总结果.d.分区表更容易维护.例如:想批量删除大量数据可以清除整个

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

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据.对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据.相

MySQL 表分区详解

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率.分区的一些优点包括:      1).与单个磁盘或文件系统分区相比,可以存储更多的数据.      2).对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关

Mysql 表分区

创建分区表: DELIMITER // create table VMMoniterData ( id_ bigint not null AUTO_INCREMENT, vmid varchar(75) null, cpu varchar(75) null, memory varchar(75) null, bpsRead varchar(75) null, bpsWrite varchar(75) null, intranetRX0 varchar(75) null, intranetRX1