最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysqlPartition(分区)初探_MySQL

来源:动视网 责编:小采 时间:2020-11-09 18:30:40
文档

mysqlPartition(分区)初探_MySQL

mysqlPartition(分区)初探_MySQL:bitsCN.com mysql Partition(分区)初探 表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分. mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MER
推荐度:
导读mysqlPartition(分区)初探_MySQL:bitsCN.com mysql Partition(分区)初探 表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分. mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MER


bitsCN.com

mysql 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:bitsCN.com mysql Partition(分区)初探 表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分. mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MER
推荐度:
标签: 分区 mysql partition
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top