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 相关文章推荐
MySQL大小写敏感的注意事项
May 24 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 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网站在线人数统计
2008/04/09 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP数组实例详解
2016/06/26 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
Prototype String对象 学习
2009/07/19 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
原生js二级联动效果
2017/06/20 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
详解Python异常处理中的Finally else的功能
2017/12/29 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
python复合条件下的字典排序
2020/12/18 Python
优秀安全员事迹材料
2014/05/11 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
法人委托书的范本格式
2014/09/11 职场文书
债务追讨律师函
2015/06/24 职场文书
工作服管理制度范本
2015/08/06 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS