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 使用SQL语句修改表名的实现
Apr 07 MySQL
详解MySQL的半同步
Apr 22 MySQL
Mysql文件存储图文详解
Jun 01 MySQL
mysql联合索引的使用规则
Jun 23 MySQL
SQL基础的查询语句
Nov 11 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 MySQL
delete in子查询不走索引问题分析
Jul 07 MySQL
MySQL分布式恢复进阶
Jul 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 表单数据的获取代码
2009/03/10 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
php实现小程序支付完整版
2018/10/09 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
jquery.masonry瀑布流效果
2017/05/25 jQuery
javascript用rem来做响应式开发
2018/01/13 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
Python批量查询域名是否被注册过
2017/06/21 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
STP的判定过程
2012/10/01 面试题
关于礼仪的演讲稿
2014/01/04 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
技校毕业生自荐信
2014/06/03 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
面试通知邮件
2015/04/20 职场文书
学校百日安全活动总结
2015/05/07 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python