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 表空间碎片的概念及相关问题解决
May 07 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
正确使用MySQL update语句
May 26 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
MySQL的Query Cache图文详解
Jul 01 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL多表查询机制
Mar 17 MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 MySQL
MySQL数据库查询之多表查询总结
Aug 05 MySQL
MySQL常用慢查询分析工具详解
Aug 14 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
终于听上了直流胆调频
2021/03/02 无线电
用php和MySql来与ODBC数据连接
2006/10/09 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
php排序算法实例分析
2016/10/17 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
python使用str &amp; repr转换字符串
2016/10/13 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
解决python线程卡死的问题
2019/02/18 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
virtualenv介绍及简明教程
2020/06/23 Python
python实现批处理文件
2020/07/28 Python
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
经典的班主任推荐信
2013/10/28 职场文书
学校对教师的评语
2014/04/28 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
七一建党节演讲稿
2014/09/11 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
2015年团支部工作总结
2015/04/03 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android