实验1

1、建表:

create table `t_part_test`(
`id` int NOT NULL default 0,
`detail` char(32) NOT NULL default '',
primary key (id)
)default charset=gbk
PARTITION BY HASH(id) PARTITIONS 10;

create table `t_nopart`(
`id` int NOT NULL default 0,
`detail` char(32) NOT NULL default '',
primary key (id)
)default charset=gbk;

CREATE TABLE `t_part_test_range` (
  `id` int(11) NOT NULL DEFAULT '0',
  `detail` char(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk
PARTITION BY RANGE (id)
(PARTITION p01 VALUES LESS THAN  (1000000),
PARTITION p02 VALUES LESS THAN  (2000000),
PARTITION p03 VALUES LESS THAN  (3000000),
PARTITION p04 VALUES LESS THAN  (4000000),
PARTITION p05 VALUES LESS THAN  (5000000),
PARTITION p06 VALUES LESS THAN  (6000000),
PARTITION p07 VALUES LESS THAN  (7000000),
PARTITION p08 VALUES LESS THAN  (8000000),
PARTITION p09 VALUES LESS THAN  (9000000),
PARTITION p10 VALUES LESS THAN MAXVALUE);

注意:5.5默认存储引擎是InnoDB

2、向三张表中分别注入10000000条数据

mysql> select count(*) from t_nopart;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (4.68 sec)

mysql> select count(*) from t_part_test;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (3.89 sec)

mysql> select count(*) from t_part_test_range;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (3.15 sec)

3、进行查询实验

mysql> select count(*) from t_nopart where id>=3000000 and id<=8099900;
+----------+
| count(*) |
+----------+
|  5099901 |
+----------+
1 row in set (3.33 sec)

mysql> select count(*) from t_part_test where id>=3000000 and id<=8099900;

+----------+
| count(*) |
+----------+
|  5099901 |
+----------+
1 row in set (1.83 sec)

mysql> select count(*) from t_part_test_range where id>=3000000 and id<=8099900;
+----------+
| count(*) |
+----------+
|  5099901 |
+----------+
1 row in set (1.73 sec)

可见分区比不分区的查询性能提高45%

 4、增加非关联字段

mysql> select count(*) from t_nopart where id>=1111111 and id<=6788877 and detail like'%10%';
+----------+
| count(*) |
+----------+
|   273065 |
+----------+
1 row in set (4.74 sec)

mysql> select count(*) from t_part_test where id>=1111111 and id<=6788877 and detail like'%10%';
+----------+
| count(*) |
+----------+
|   273065 |
+----------+
1 row in set (4.22 sec)

mysql> select count(*) from t_part_test_range where id>=1111111 and id<=6788877 and detail like'%10%';
+----------+
| count(*) |
+----------+
|   273065 |
+----------+
1 row in set (3.62 sec)

hash分区提高11%

range分区提高31%

mysql> select * from t_nopart where id>=2000000 and id<=8000000 and detail='第5546328条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 5546328 | 第5546328条记录 |
+---------+-----------------+
1 row in set (4.16 sec)

mysql> select * from t_part_test where id>=2000000 and id<=8000000 and detail='第5546328条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 5546328 | 第5546328条记录 |
+---------+-----------------+
1 row in set (5.32 sec)

mysql> select * from t_part_test_range where id>=2000000 and id<=8000000 and detail='第5546328条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 5546328 | 第5546328条记录 |
+---------+-----------------+
1 row in set (3.61 sec)

hash分区性能降低

range性能提高

5、查询字段为非索引、非分区关联字段

mysql> select * from t_nopart where  detail='第5555876条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 5555876 | 第5555876条记录 |
+---------+-----------------+
1 row in set (6.89 sec)

mysql> select * from t_part_test where  detail='第5555876条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 5555876 | 第5555876条记录 |
+---------+-----------------+
1 row in set (11.26 sec)

mysql> select * from t_part_test_range where  detail='第5555876条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 5555876 | 第5555876条记录 |
+---------+-----------------+
1 row in set (5.47 sec)

同上

 实验2

对无主键的表实验:

1、建表

CREATE TABLE `t_nopri_nopart` (
  `id` int(11) NOT NULL DEFAULT '0',
  `detail` char(32) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

CREATE TABLE `t_nopri_part` (
  `id` int(11) NOT NULL DEFAULT '0',
  `detail` char(32) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=gbk
PARTITION BY RANGE (id)
(PARTITION p01 VALUES LESS THAN  (1000000),
PARTITION p02 VALUES LESS THAN  (2000000),
PARTITION p03 VALUES LESS THAN  (3000000),
PARTITION p04 VALUES LESS THAN  (4000000),
PARTITION p05 VALUES LESS THAN  (5000000),
PARTITION p06 VALUES LESS THAN  (6000000),
PARTITION p07 VALUES LESS THAN  (7000000),
PARTITION p08 VALUES LESS THAN  (8000000),
PARTITION p09 VALUES LESS THAN  (9000000),
PARTITION p10 VALUES LESS THAN MAXVALUE);

 2、向两个表中个注入500万条数据

mysql> select count(*) from t_nopri_part;
+----------+
| count(*) |
+----------+
|  5000000 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from t_nopri_nopart;
+----------+
| count(*) |
+----------+
|  5000000 |
+----------+
1 row in set (0.00 sec)

3、查询测试

mysql> select count(*) from t_nopri_part where id between 2200000 and 8000000;
+----------+
| count(*) |
+----------+
|  2800001 |
+----------+
1 row in set (1.04 sec)

mysql> select count(*) from t_nopri_nopart where id between 2200000 and 8000000;
+----------+
| count(*) |
+----------+
|  2800001 |
+----------+
1 row in set (1.68 sec)

速度提高大约40%

4、增加非关联字段

mysql> select count(*) from t_nopri_part where id>=1000001 and id<=3000000 and detail like'%10%';
+----------+
| count(*) |
+----------+
|   194831 |
+----------+
1 row in set (0.94 sec)

mysql> select count(*) from t_nopri_nopart where id>=1000001 and id<=3000000 and detail like'%10%';
+----------+
| count(*) |
+----------+
|   194831 |
+----------+
1 row in set (1.17 sec)

分区表速度提高20%

mysql> select count(*) from t_nopri_part where id>=1500000 and id<=3600000 and detail='第2899999条记录';
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.51 sec)

mysql> select count(*) from t_nopri_nopart where id>=1500000 and id<=3600000 and detail='第2899999条记录';
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.79 sec)

分区表速度提高35%

5、查询条件只有分关联字段

mysql> select * from t_nopri_part where detail='第3889897条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 3889897 | 第3889897条记录 |
+---------+-----------------+
1 row in set (0.79 sec)
mysql>  select *  from t_nopri_nopart where detail='第3889897条记录';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 3889897 | 第3889897条记录 |
+---------+-----------------+
1 row in set (0.75 sec)

无明显区别

6、查询条件只有分区关联字段

mysql> select * from t_nopri_part where id='3888888';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 3888888 | 第3888888条记录 |
+---------+-----------------+
1 row in set (0.13 sec)

mysql> select * from t_nopri_nopart  where id='3888888';
+---------+-----------------+
| id      | detail          |
+---------+-----------------+
| 3888888 | 第3888888条记录 |
+---------+-----------------+
1 row in set (0.53 sec)

分区速度提高75;

结论

1、相对于5.1,MySQL5.5在表分区功能上有很大改善,主要是查询性能上的明显改善;

2、分区速度的提升类似建了索引,所以如果需要分区的字段已经建了索引,一般没有必要在做分区;

3、mysql的表分区还有一个重要的功能就是可以将表的各分区放到不同的磁盘上,以增加表容量;

4、range分区比hash分区的查询性能高;

转载于:https://www.cnblogs.com/huangye-dream/archive/2013/06/03/3115474.html

表分区MySQL版本:5.5.11比5.1查询速度明显提高(4倍左右)相关推荐

  1. mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  2. 处理Zabbix历史数据库办法二---使用MySQL表分区

    一 应用场景描述 http://john88wang.blog.51cto.com/2165294/1770582 在前面介绍可以通过创建新表然后导入一个月内的数据到新表,最后删除旧表的方法来处理历史 ...

  3. mysql数据库表分区

    一.表分区 1.对表分区的原因 数据库数据越来越大,导致单个表中数据太多.以至于增删改查询速度变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈. 2.表分区 表分区就是将一个表 ...

  4. mysql 添加分区_创建,增加,删除mysql表分区

    1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles ( emp_no      INT NOT NULL, title        ...

  5. MySql表分区的创建与使用

    一.创建表分区 MySql默认是支持表分区的,可以通过语句查询是否开启表分区功能:show plugins : 创建表分区只需要在创建表的语句后面加上分区语句就可以,例如: create table ...

  6. MySQL表分区详解

    什么表分区 mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf 中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的 ...

  7. Oracle-13:Oracle中的表分区

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客记录了表分区 表分区的含义: 典型的拿空间换时间的案例! 表分区对一张表进行分区,分区之后表中的数据存 ...

  8. postgresql 表分区

    postgresql 表分区 背景 一个大表查询性能往往不高, 其原因在于数据加载 data load,扫描数据 table scans ,内存交换 memory swap 等等操作的时间成本会随着数 ...

  9. oracle 同义词,表空间,表分区

    同义词:synonym 私有同义词: 一般普通用户自己建立的同义词,用于创建这需要create synonym权限 grant create synonym to scott; create syno ...

最新文章

  1. 网络编程--connect()、listen()、accept()
  2. [原创]SpotLight性能监控工具使用介绍
  3. Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建
  4. Java黑皮书课后题第5章:*5.1(统计正数和负数的个数然后计算这些数的平均值)编写程序,读入未指定个数的整数,判断读入的正数有多少个、负数有多少个,然后计算输入值的总和和平均值(不记0,浮点表示)
  5. linux自动应答,08. 创建 ks.cfg自动应答文件
  6. javascript V8引擎垃圾收集机制
  7. 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
  8. Opencv4找不到CV_FOURCC
  9. php x不能转移,[PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点
  10. TCC解决分布式事务问题
  11. imagenet标签
  12. 图书信息管理系统(SSM框架)
  13. 高密集型工业体系步履蹒跚
  14. 通过调用rundll32.exe来打开一些系统特定文件
  15. 『IT视界』 [IT风云]MyEclipse 8.5 开发环境配置 插件安装(转载)
  16. Fite-C02-1班成员学习进度记录
  17. 十二星座物语,女生最喜欢的星座性格【1】
  18. Elasticsearch启动报错:warning: ignoring JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191; using bundled JDK
  19. 量子计算机量子信息研讨会,2015全国量子信息与量子计算机前沿研讨会在我校召开...
  20. 网络技术-ENSP 华为模拟器(二)静态路由配置-3路由3PC

热门文章

  1. python【蓝桥杯vip练习题库】ALGO-236大小写转换
  2. 计算机应用基础浙大,2014春浙大远程教育计算机应用基础-3.Word知识题
  3. 反射工具类 java_Java反射工具类
  4. 电脑主板维修_自学电脑主板维修第45讲
  5. android 轮播 getWith,NavigationTermSet.GetWithNewView 方法
  6. 进阶学习(3.14) Strategy Pattern 策略模式
  7. 网站推广——网站推广专员从蜘蛛角度出发如何进行网站优化
  8. 浅析网站SEO优化中导航优化的四大技巧!
  9. 计算机电缆称赞千 捷网络下拉刷词,电脑常用技巧
  10. Android 画虚线边框