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 22 MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
May 25 MySQL
mysq启动失败问题及场景分析
Jul 15 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 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通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python中函数的用法实例教程
2014/09/08 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
pycharm安装和首次使用教程
2018/08/27 Python
python怎么判断模块安装完成
2020/06/19 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
财务人员求职自荐书范文
2014/02/10 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
有关环保的标语
2014/06/13 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
标准版离职证明书
2014/09/12 职场文书
法制教育观后感
2015/06/17 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书