MySQL中distinct与group by之间的性能进行比较


Posted in MySQL onMay 26, 2021

最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考。

测试过程:

准备一张测试表 

CREATE TABLE `test_test` (
 `id` int(11) NOT NULL auto_increment,
 `num` int(11) NOT NULL default '0',
 PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

建个储存过程向表中插入10W条数据    

create procedure p_test(pa int(11)) 
 begin 
 
 declare max_num int(11) default 100000; 
 declare i int default 0; 
 declare rand_num int; 
 
 select count(id) into max_num from test_test; 
 
 while i < pa do 
 if max_num < 100000 then 
  select cast(rand()*100 as unsigned) into rand_num; 
  insert into test_test(num)values(rand_num); 
 end if; 
 set i = i +1; 
 end while; 
 end

调用存储过程插入数据

call p_test(100000);

开始测试:(不加索引)

select distinct num from test_test; 
 select num from test_test group by num; 
 
 [SQL] select distinct num from test_test;
 受影响的行: 0
 时间: 0.078ms
 
 [SQL] 
 select num from test_test group by num;
 受影响的行: 0
 时间: 0.031ms

MySQL中distinct与group by之间的性能进行比较

二、num字段上创建索引

ALTER TABLE `test_test` ADD INDEX `num_index` (`num`) ;

再次查询   

select distinct num from test_test; 
 select num from test_test group by num; 
 [SQL] select distinct num from test_test;
 受影响的行: 0
 时间: 0.000ms
 
 [SQL] 
 select num from test_test group by num;
 受影响的行: 0
 时间: 0.000ms

MySQL中distinct与group by之间的性能进行比较

这时候我们发现时间太小了 0.000秒都无法精确了。
我们转到命令行下测试

mysql> set profiling=1;
 mysql> select distinct(num) from test_test; 
 mysql> select num from test_test group by num;
 mysql> show profiles;
 +----------+------------+----------------------------------------+
 | Query_ID | Duration | Query   |
 +----------+------------+----------------------------------------+
 | 1 | 0.00072550 | select distinct(num) from test_test |
 | 2 | 0.00071650 | select num from test_test group by num |
 +----------+------------+----------------------------------------+

MySQL中distinct与group by之间的性能进行比较

分析:

加了索引之后 distinct 比没加索引的distinct 快了107倍。
加了索引之后 group by 比没加索引的group by 快了43倍。
再来对比 :distinct 和group by
不管是加不加索引group by 都比distinct 快。

因此使用的时候建议选 group by。

以上就是在MySQL中distinct与group by之间的性能进行比较的,通过以上比较是不是对distinct和group by有了更深入的了解,希望对大家的学习有所帮助。

MySQL 相关文章推荐
数据库连接池
Apr 06 MySQL
MySQL触发器的使用
May 24 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
MySQL 数据类型详情
Nov 11 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL多表查询机制
Mar 17 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 #MySQL
MySQL中出现乱码问题的终极解决宝典
如何设计高效合理的MySQL查询语句
May 26 #MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 #MySQL
正确使用MySQL INSERT INTO语句
May 26 #MySQL
正确使用MySQL update语句
May 26 #MySQL
详解MySQL集群搭建
You might like
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
php安装swoole扩展的方法
2015/03/19 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
详解javascript函数的参数
2015/11/10 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
使用Python进行目录的对比方法
2018/11/01 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
django框架使用方法详解
2019/07/18 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python爬虫要用到的库总结
2020/07/28 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
法人代表授权委托书
2014/04/08 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
工资证明范本
2015/06/12 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL