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 Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL root密码的重置方法
Apr 21 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
mysql 索引合并的使用
Aug 30 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
mysql sql常用语句大全
Jun 21 MySQL
MySQL常用慢查询分析工具详解
Aug 14 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 MySQL
MySQL深分页问题解决思路
Dec 24 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
AM/FM收音机的安装与调试
2021/03/02 无线电
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
PHP MSSQL 存储过程的方法
2008/12/24 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
Python base64编码解码实例
2015/06/21 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
优秀员工自荐书
2013/12/19 职场文书
大专生自荐书范文
2014/06/22 职场文书
未婚证明书模板
2014/10/08 职场文书
单位接收函范文
2015/01/30 职场文书
不同意离婚代理词
2015/05/23 职场文书
python实现简单石头剪刀布游戏
2021/10/24 Python
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL