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 18 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
May 26 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
MySQL GRANT用户授权的实现
Jun 18 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
MYSQL 运算符总结
Nov 11 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 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
PHP4之COOKIE支持详解
2006/10/09 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php获取字段名示例分享
2014/03/03 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python版名片管理系统
2018/11/30 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Python 解析xml文件的示例
2020/09/29 Python
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
广告创意求职信
2014/03/17 职场文书
意向协议书
2015/01/27 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
职工培训工作总结
2015/08/10 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang