mysql Partition(分区)初探
表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度
mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MERGE不如partition实用,
因为MERGE会在所有的底层表上查询,而partition只在相应的分区上查询.
建立了两个表,分别为分区和未分区的,分区表按年进行分区.
- CREATE TABLE `20130117date_par` (
- `content` varchar(20) NOT NULL,
- `create_time` datetime NOT NULL,
- KEY `20130117date_idx_date` (`create_time`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
- PARTITION BY RANGE (YEAR(create_time))
- (PARTITION p2009 VALUES LESS THAN (2010),
- PARTITION p2010 VALUES LESS THAN (2011),
- PARTITION p2011 VALUES LESS THAN (2012),
- PARTITION p2012 VALUES LESS THAN (2013),
- PARTITION p2013 VALUES LESS THAN (2014))
- CREATE TABLE `20130117date` (
- `content` varchar(20) NOT NULL,
- `create_time` datetime NOT NULL,
- KEY `20130117date_idx_date` (`create_time`)
- ) ENGINE=InnoDB
CREATE TABLE `20130117date_par` (`content` varchar(20) NOT NULL,`create_time` datetime NOT NULL,KEY `20130117date_idx_date` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE (YEAR(create_time))
(PARTITION p2009 VALUES LESS THAN (2010),PARTITION p2010 VALUES LESS THAN (2011),PARTITION p2011 VALUES LESS THAN (2012),PARTITION p2012 VALUES LESS THAN (2013),PARTITION p2013 VALUES LESS THAN (2014))CREATE TABLE `20130117date` (`content` varchar(20) NOT NULL,`create_time` datetime NOT NULL,KEY `20130117date_idx_date` (`create_time`)
) ENGINE=InnoDB
用sp向分区表和普通表各插入了90w条随机数据.
用mysqlslap进行下测试
不用分区表
- select SQL_NO_CACHE * from 20130117date
- where create_time BETWEEN '2013-01-01' and '2013-01-02';
- select SQL_NO_CACHE * from 20130117date
- where create_time BETWEEN '2012-12-25' and '2013-01-05';
select SQL_NO_CACHE * from 20130117date
where create_time BETWEEN '2013-01-01' and '2013-01-02';
select SQL_NO_CACHE * from 20130117date
where create_time BETWEEN '2012-12-25' and '2013-01-05';
Benchmark
Average number of seconds to run all queries: 0.881 seconds
Minimum number of seconds to run all queries: 0.062 seconds
Maximum number of seconds to run all queries: 3.844 seconds
Number of clients running queries: 1
Average number of queries per client: 2
Benchmark
Average number of seconds to run all queries: 0.703 seconds
Minimum number of seconds to run all queries: 0.062 seconds
Maximum number of seconds to run all queries: 1.922 seconds
Number of clients running queries: 1
Average number of queries per client: 2
Benchmark
Average number of seconds to run all queries: 1.250 seconds
Minimum number of seconds to run all queries: 0.109 seconds
Maximum number of seconds to run all queries: 4.032 seconds
Number of clients running queries: 1
Average number of queries per client: 2
用分区表
- select SQL_NO_CACHE * from 20130117date_par
- where create_time BETWEEN '2013-01-01' and '2013-01-02';
- select SQL_NO_CACHE * from 20130117date_par
- where create_time BETWEEN '2012-12-25' and '2013-01-05';
select SQL_NO_CACHE * from 20130117date_par
where create_time BETWEEN '2013-01-01' and '2013-01-02';
select SQL_NO_CACHE * from 20130117date_par
where create_time BETWEEN '2012-12-25' and '2013-01-05';
Benchmark
Average number of seconds to run all queries: 0.068 seconds
Minimum number of seconds to run all queries: 0.047 seconds
Maximum number of seconds to run all queries: 0.110 seconds
Number of clients running queries: 1
Average number of queries per client: 2
Benchmark
Average number of seconds to run all queries: 0.250 seconds
Minimum number of seconds to run all queries: 0.031 seconds
Maximum number of seconds to run all queries: 1.078 seconds
Number of clients running queries: 1
Average number of queries per client: 2
Benchmark
Average number of seconds to run all queries: 0.046 seconds
Minimum number of seconds to run all queries: 0.046 seconds
Maximum number of seconds to run all queries: 0.047 seconds
Number of clients running queries: 1
Average number of queries per client: 2
看来性能还是有一定的提升的.
执行
- explain PARTITIONS select * from 20130117date_par
- where create_time BETWEEN '2012-01-01' and '2012-01-02';
explain PARTITIONS select * from 20130117date_par
where create_time BETWEEN '2012-01-01' and '2012-01-02';
可以看出这个query只扫描了p2012这个分区.
而且分区表的好处在于维护比较方便.比如2009年的数据不需要了,分区表的方法为
- alter table 20130117date_par drop PARTITION p2009
alter table 20130117date_par drop PARTITION p2009
不到1s就行了
普通表为
- delete from 20130117date
- where create_time BETWEEN '2009-01-01' and '2010-01-01'
delete from 20130117date
where create_time BETWEEN '2009-01-01' and '2010-01-01'
用了10.25s左右
转载于:https://blog.51cto.com/daheyuan/1131719
mysql Partition(分区)初探相关推荐
- mysql in partition_MySQL Partition分区扫盲
MySQL从5.1.3开始支持Partition,你可以使用如下命令来确认你的版本是否支持Partition: mysql> SHOW VARIABLES LIKE '%partition%'; ...
- mysql partition 语法_MySQL partition分区小结
MySQL partition分区 分区概念 分区针对不同的数据库,具有不同的特性.在这里专门针对MySQL数据库而言.在MySQL数据库里,分区这个概念是从mysql 5.1才开始提供的.不过目前只 ...
- Mysql PARTITION 数据表分区技术日期
参考:http://www.sunzhenghua.com/mysql-myisam-innodb-partition-range-list-hash 在这一章节里, 我们来了解下 Mysql 中的分 ...
- mysql的partition分区
前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题. 方式一:通过业务逻辑根据数据的大小通 ...
- maxvalue mysql自动分区_mysql的partition分区
前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题. 方式一:通过业务逻辑根据数据的大小通 ...
- MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...
- mysql 分区表优化_Sql优化之Mysql表分区
一 分区表适用于以下场景 1:表非常大以至于无法全部放在内存中,或者只在标的最后部分有热点数据,其他均是历史数据 2:分区表的数据更容易维护.例如想批量删除大量数据可以使用清除整个分区的方式.另外还 ...
- mysql创建分区是否存在_mysql中如何判断是否支持分区
mysql可以通过下面语句判断是否支持分区: SHOW VARIABLES LIKE '%partition%'; 如果输出: have_partitioning YES 表示支持分区. 或者通过 ...
- Mysql表分区的选择与实践小结
2019独角兽企业重金招聘Python工程师标准>>> 在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快.这时候可能就需要通过分库,分表, ...
最新文章
- 报告 | 2017年云商业智能市场分析:云计算比大数据更重要
- 2016年中国数据安全五大发展趋势
- RocketMQ简介、环境搭建
- jquery插件之无缝循环新闻列表
- mysql子分区多少层_MySQL 子分区-阿里云开发者社区
- 【Linux】Linux中常用操作命令
- python暂停和恢复_python – 暂停和恢复QThread
- 力扣59.螺旋矩阵II(JavaScript)
- hdu 1162(最小生成树kruskal)
- windows8怎么关机_按下电源键后发生了什么?电脑是如何关机的?
- 计算机组成原理中EMAR是什么,计算机组成原理复习资料+试题
- 文达仓库管理软件 v5.32 网络版 怎么用
- python 结巴分词学习
- Python人脸识别库的安装
- 第四篇机器学习投资组合——模型测试
- 【系统分析师】操作系统
- 每个月5千的工资不想干了想转行测试,软件测试薪资待遇怎么样?
- 批量全景视频画面提取
- 个人博客系统【项目篇】
- STC89C52实现时钟功能