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 用户权限管理
Apr 20 MySQL
linux下导入、导出mysql数据库命令的实现方法
May 26 MySQL
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
MySQL数据库之内置函数和自定义函数 function
Jun 16 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
基于mysql的论坛(2)
2006/10/09 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
修改发贴的编辑功能
2007/03/07 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
javascript 写类方式之七
2009/07/05 Javascript
JS跨域总结
2012/08/30 Javascript
js精度溢出解决方案
2012/12/02 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
Bootstrap插件全集
2016/07/18 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
javascript实现画板功能
2020/04/12 Javascript
Python之时间和日期使用小结
2019/02/14 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
详解python:time模块用法
2019/03/25 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
MySQL面试题目集锦
2016/04/14 面试题
人力资源部培训专员岗位职责
2014/01/02 职场文书
创业计划书撰写原则
2014/01/25 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS