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 07 MySQL
详解MySQL连接挂死的原因
May 18 MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
May 25 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
mysql序号rownum行号实现方式
Dec 24 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和ACCESS写聊天室(七)
2006/10/09 PHP
深入解析php之apc
2013/05/15 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
详解angular element()方法使用
2017/04/08 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
python list转dict示例分享
2014/01/28 Python
python实现学生管理系统
2018/01/11 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
英文商务邀请信
2014/01/22 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
房产买卖委托公证书
2014/04/04 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
2015年护士节慰问信
2015/03/23 职场文书
捐款仪式主持词
2015/07/04 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏