mysqlPartition(分区)初探_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysqlPartition(分区)初探_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3868字,纯文字阅读大概需要6分钟。
内容图文
bitsCN.commysql Partition(分区)初探
表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分.
mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MERGE不如partition实用,
因为MERGE会在所有的底层表上查询,而partition只在相应的分区上查询.
建立了两个表,分别为分区和未分区的,分区表按年进行分区.
Sql代码
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进行下测试
不用分区表
Sql代码
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
用分区表
Sql代码
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
看来性能还是有一定的提升的.
执行
Sql代码
explain PARTITIONS select * from 20130117date_par
where create_time BETWEEN '2012-01-01' and '2012-01-02';
可以看出这个query只扫描了p2012这个分区.
而且分区表的好处在于维护比较方便.比如2009年的数据不需要了,分区表的方法为
Sql代码
alter table 20130117date_par drop PARTITION p2009
不到1s就行了
普通表为
Sql代码
delete from 20130117date
where create_time BETWEEN '2009-01-01' and '2010-01-01'
用了10.25s左右
bitsCN.com内容总结
以上是互联网集市为您收集整理的mysqlPartition(分区)初探_MySQL全部内容,希望文章能够帮你解决mysqlPartition(分区)初探_MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。