Mysql分区对大表查询效率的影响
本实验主要测试在没有任何索引的情况下分区对大表查询效率的影响
实验环境:
rhel 6.5
mysql5.5.58
表结构
1 mysql> show create table users\G 2 *************************** 1. row *************************** 3 Table: users 4 Create Table: CREATE TABLE `users` ( 5 `id` int(10) unsigned NOT NULL, 6 `name` varchar(32) NOT NULL DEFAULT '', 7 `age` int(10) unsigned DEFAULT NULL, 8 `email` varchar(32) NOT NULL DEFAULT '', 9 `account` varchar(64) NOT NULL DEFAULT '', 10 `address` varchar(64) NOT NULL DEFAULT '' 11 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 12 1 row in set (0.00 sec)
表中的数据有10000000记录
1 mysql> select count(*) from users; 2 +----------+ 3 | count(*) | 4 +----------+ 5 | 10000000 | 6 +----------+ 7 1 row in set (0.09 sec)
首先随便选取一条记录查询,看看mysql服务器需要的时间
1 mysql> select * from users where id=2478945; 2 +---------+------------------+------+--------------------------+------------------+---------------------------------------------------+ 3 | id | name | age | email | account | address | 4 +---------+------------------+------+--------------------------+------------------+---------------------------------------------------+ 5 | 2478945 | Nina Oberbrunner | 8 | beatty.martina@gmail.com | 6579978004257241 | 99802 Dietrich Mountain 6 New Pinkie, WA 66024-5962 | 7 +---------+------------------+------+--------------------------+------------------+---------------------------------------------------+ 8 1 row in set (18.25 sec)
很显然该查询进行了全表扫描
1 mysql> explain select * from users where id=2478945 \G 2 *************************** 1. row *************************** 3 id: 1 4 select_type: SIMPLE 5 table: users 6 type: ALL 7 possible_keys: NULL 8 key: NULL 9 key_len: NULL 10 ref: NULL 11 rows: 10000000 12 Extra: Using where 13 1 row in set (0.04 sec)
现在对大表进行分区
1 mysql> alter table users partition by hash(id) partitions 5; 2 Query OK, 10000000 rows affected (37.24 sec) 3 Records: 10000000 Duplicates: 0 Warnings: 0
测试一下在没有建任何索引的情况下,对大表进行分区是否会影响查询的速度
1 mysql> select * from users where id=2478945; 2 +---------+------------------+------+--------------------------+------------------+---------------------------------------------------+ 3 | id | name | age | email | account | address | 4 +---------+------------------+------+--------------------------+------------------+---------------------------------------------------+ 5 | 2478945 | Nina Oberbrunner | 8 | beatty.martina@gmail.com | 6579978004257241 | 99802 Dietrich Mountain 6 New Pinkie, WA 66024-5962 | 7 +---------+------------------+------+--------------------------+------------------+---------------------------------------------------+ 8 1 row in set (2.36 sec)
可以看到查询同一条记录从开始的18.25s变为2.36秒,说明分区对大表查询有一定的优化
查询过程和上面一样,进行全表扫描,但是分区后数据文件变小,扫描的行数变为2000000,提高了速度
1 mysql> explain select * from users where id=2478945 \G 2 *************************** 1. row *************************** 3 id: 1 4 select_type: SIMPLE 5 table: users 6 type: ALL 7 possible_keys: NULL 8 key: NULL 9 key_len: NULL 10 ref: NULL 11 rows: 2000000 12 Extra: Using where 13 1 row in set (0.06 sec)
分区后,每个分区数据文件是200多兆,没分区时一个文件1G多
1 [root@localhost test]# pwd 2 /usr/local/mysql/data/test 3 [root@localhost test]# ll -h 4 total 1.1G 5 -rw-r--r-- 1 mysql mysql 65 9月 13 23:20 db.opt 6 -rw-rw---- 1 mysql mysql 8.6K 11月 26 22:39 users.frm 7 -rw-rw---- 1 mysql mysql 40 11月 26 22:39 users.par 8 -rw-rw---- 1 mysql mysql 221M 11月 26 22:40 users#P#p0.MYD 9 -rw-rw---- 1 mysql mysql 1.0K 11月 26 22:40 users#P#p0.MYI 10 -rw-rw---- 1 mysql mysql 221M 11月 26 22:40 users#P#p1.MYD 11 -rw-rw---- 1 mysql mysql 1.0K 11月 26 22:40 users#P#p1.MYI 12 -rw-rw---- 1 mysql mysql 221M 11月 26 22:40 users#P#p2.MYD 13 -rw-rw---- 1 mysql mysql 1.0K 11月 26 22:40 users#P#p2.MYI 14 -rw-rw---- 1 mysql mysql 221M 11月 26 22:40 users#P#p3.MYD 15 -rw-rw---- 1 mysql mysql 1.0K 11月 26 22:40 users#P#p3.MYI 16 -rw-rw---- 1 mysql mysql 221M 11月 26 22:40 users#P#p4.MYD 17 -rw-rw---- 1 mysql mysql 1.0K 11月 26 22:40 users#P#p4.MYI 18 [root@localhost test]#
转载于:https://www.cnblogs.com/iaknehc/p/7900960.html
Mysql分区对大表查询效率的影响相关推荐
- MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题
MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题 参考文章: (1)MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题 (2)https://www.cnblogs.com/lili ...
- mysql 大表查询慢_mysql大表查询慢怎么优化?
mysql大表查询慢的优化方法:1.合理建立索引,通常查询利用到索引比不用索引更快:2.对关键字段建立水平分区,比如时间字段,若查询条件往往通过时间范围来进行查询,能提升不少性能:3.建立粗粒度数据表 ...
- mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率
原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...
- Mysql多表查询效率的研究(一)
Mysql多表查询效率的研究(一) 本文探究了mysql InnoDB引擎在多表查询的应用场景下,使用子表.内连接和左联接运行速度的差别,并且比较了索引使用与否对查询效率的影响. 第一部分简略地概括了 ...
- 怎么提高mysql多表查询效率_MySQL创建index提高多表查询效率
本文的目的在于探讨use index for join语句的基本原理.我们知道,在MySQL使用JION语句关联多表查询时,为表创建Index能够大幅度提高查询效率.下面以一个简单的例子来了解其中的原 ...
- 如何优化MySQL千万级大表
很好的一篇博客,转载 如何优化MySQL千万级大表 原文链接::https://blog.csdn.net/yangjianrong1985/article/details/102675334 千万级 ...
- 一入职!就遇到MySQL亿级大表优化....
作者丨jia-xin 出处: https://www.cnblogs.com/YangJiaXin/p/10828244.html "前段时间刚入职一家公司,就遇到了 MySQL 亿级大表优 ...
- (探讨)MyBatis中的N+1问题,多表关联查询效率高点还是多次单表查询效率高
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么? https://blog.csdn.net/weixin_33869377/article/details/86265527 MyBat ...
- MySQL 笔记5 -- 多表查询
MySQL 笔记5 – 多表查询 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 一.表之间关系 1.一对一 ...
最新文章
- bootstrap checkbox
- class a_class;与new class();的区别
- 一个SQL Server Sa密码破解的存储过程
- 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能...
- 【转】中国式管理最有趣的地方,可能就在这些关键词之中
- webstorm license key
- qtcreator中常用快捷键总结
- Python学习-生成器
- 【资产管理】2020年海外头部资管机构经营特点及启示
- 鸿蒙形容欣欣向荣发展,形容发展超迅速的成语
- 学习嵌入式实时操作系统(RTOS),以uc/OS-III为例
- ugui 转轮_unity3D的FingerGestures小工具
- 报错Replace Autoprefixer browsers option to Browserslist config.
- ehvierwer登录与不登录_微信上不去了怎么办,峰哥教你微信登录不上去的办法
- jQuery写法 入口函数
- 直流斩波电路在matlab中的建模与仿真,基于MATLAB/Simulink的直流斩波电路分析
- 数据库sql文件导入失败(高版本转入低版本),报错:[SQL] Query test start[ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
- Echarts5.3.2可视化案例-布局篇
- Apple是第一家价值1万亿美元的上市公司
- 30岁了,最近碰到的那些离婚的事儿