mysql Partition(分区)初探
 
表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分. 
mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MERGE不如partition实用, 
  www.2cto.com  
因为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 
         www.2cto.com  
看来性能还是有一定的提升的. 
       
执行 
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左右

mysql Partition(分区)初探的更多相关文章

  1. MySQL partition分区I

    http://blog.csdn.net/binger819623/article/details/5280267 一.        分区的概念二.        为什么使用分区?(优点)三.    ...

  2. MYSQL之水平分区----MySQL partition分区I(5.1)

    一.        分区的概念 二.        为什么使用分区?(优点) 三.        分区类型 四.        子分区 五.        对分区进行修改(增加.删除.分解.合并) 六 ...

  3. MySQL PARTITION 分区

    MySQL HASH分区 http://www.cnblogs.com/chenmh/p/5644496.html RANGE分区:http://www.cnblogs.com/chenmh/p/56 ...

  4. MySQL Partition分区扫盲

    MySQL从5..3开始支持Partition,你可以使用如下命令来确认你的版本是否支持Partition: mysql> SHOW VARIABLES LIKE '%partition%'; ...

  5. mysql partition分区

    (转) 自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)=举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录. === 水 ...

  6. mysql的partition分区

    前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题.方式一:通过业务逻辑根据数据的大小通过 ...

  7. mysql表分区 partition

    表分区 partition 当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低. 可不可以把表的数据分开在几张表上? 1: 从业务角度可以解决.. (分表,水平 ...

  8. mysql的分区和分表

    分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中. mysql支持的分区类型包括Range.List.Hash.Key,其中Range比较常用: RANGE分区:基于属于一个给定连续区 ...

  9. MySQL表分区技术

    MySQL表分区技术 MySQL有4种分区类型: 1.RANGE 分区 - 连续区间的分区 - 基于属于一个给定连续区间的列值,把多行分配给分区: 2.LIST 分区 - 离散区间的分区 - 类似于按 ...

随机推荐

  1. 查看kindle paperwhite2上卡索引书籍的方法

    昨天kindle耗电量突然加快,经过检查和网络搜索得知是卡索引导致的耗电量增大.我自己通过关闭索引的方式解决了这个问题. 在这个过程中发现了一个可以直接找到所有卡索引书籍的方法,在此分享一下. 首先打 ...

  2. 关于redhat6的服务说明

    服务名称 功能 默认 建议 备注说明 NetworkManager 主要用于图形网络连接管理 开启 关闭 对服务器无用 abrt-ccpp Automated Bug Reporting Tool 开 ...

  3. LoadRunner安装包(性能测试工具分享)

    今天在测试课指导老师朱香元的指导下,开始了测试软件的安装,下面我分享一下整个安装流程,最后我会附带安装包的 第一步:链接:http://pan.baidu.com/s/1pXqk2 密码:csjk , ...

  4. updatepannel的使用

    注意:放在updatepannel中的数据,单击事件之后,只重新加载后台数据,不加载前台数据,所以如果页面上有js的插件,对js插件的引用和赋值不要放在updatepannel中,同时尽量减小upda ...

  5. 将文件的编码格式转换为utf-8

    背景:项目中有一些其他部门发过来的代码,编码格式有utf-8,也有GBK,而且是散乱在各个文件夹中的,处理起来十分的麻烦.我想把他们都转成统一的utf-8的格式.代码很简单,直接上代码好了. impo ...

  6. javascript 之封装技巧

    技术--- 闭包 javascript中的对象属性都是公开的,外界都可访问到,例: function cat(){ this.name = '猫'; this.climb = function(){ ...

  7. 解决Android Studio启动速度慢的问题。避免每次启动Android Studio都要fetching Android sdk compoment information。

    Android Studio每次启动都要去fetching sdk,由于Android sdk 官网在大陆连不上,所以每次启动时界面都会停在那里很久. 解决办法就是设置取消每次fetching sdk ...

  8. Mac 下显示隐藏文件

    将下面的命令粘贴进终端,按提示操作即可(可能需要输入电脑密码) 显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:d ...

  9. JS模版引擎[20行代码实现模版引擎读后感]

    曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...

  10. Linux apt-get error

    csh@csh-laptop:~/ejabberd-15.03$ sudo apt-get install mysqlReading package lists... DoneBuilding dep ...