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 msi版本下载安装图文详细教程
May 21 MySQL
mysql升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 MySQL
详解MySQL的内连接和外连接
May 08 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的可变变量名需要的注意的问题
2013/06/20 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
Python创建日历实例
2014/08/21 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python实现PID算法及测试的例子
2019/08/08 Python
python的json包位置及用法总结
2020/06/21 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
工程师岗位职责
2013/11/08 职场文书
车间主管岗位职责
2013/11/14 职场文书
化工专业推荐信范文
2013/11/28 职场文书
心理健康教育心得体会
2013/12/29 职场文书
工厂见习报告范文
2014/10/31 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
交通安全教育心得体会
2016/01/15 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
简单谈谈Python面向对象的相关知识
2021/06/28 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
Hive HQL支持2种查询语句风格
2022/06/25 数据库
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python