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通过binlog恢复数据
May 27 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 MySQL
MySQL选择合适的备份策略和备份工具
Jun 01 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 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实现设计模式中的单例模式详解
2014/10/11 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
php验证码生成代码
2015/11/11 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
在Python程序中操作MySQL的基本方法
2015/07/29 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
python实现猜拳游戏
2020/03/04 Python
python 如何调用 dubbo 接口
2020/09/24 Python
举例讲解Python装饰器
2020/12/24 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
Gap工厂店:Gap Factory
2017/11/02 全球购物
采购意向书范本
2014/03/31 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers