MySQL中distinct和group by性能比较[转]
之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论(仅在个人计算机上测试,可能不全面,仅供参考)
测试过程:
准备一张测试表
1 CREATE TABLE `test_test` ( 2 `id` int(11) NOT NULL auto_increment, 3 `num` int(11) NOT NULL default '0', 4 PRIMARY KEY (`id`) 5 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
建个储存过程向表中插入10W条数据
01 create procedure p_test(pa int(11)) 02 begin 03 04 declare max_num int(11) default 100000; 05 declare i int default 0; 06 declare rand_num int; 07 08 select count(id) into max_num from test_test; 09 10 while i < pa do 11 if max_num < 100000 then 12 select cast(rand()*100 as unsigned) into rand_num; 13 insert into test_test(num)values(rand_num); 14 end if; 15 set i = i +1; 16 end while; 17 end
调用存储过程插入数据
1 call p_test(100000);
开始测试:(不加索引)
01 select distinct num from test_test; 02 select num from test_test group by num; 03 04 [SQL] select distinct num from test_test; 05 受影响的行: 0 06 时间: 0.078ms 07 08 [SQL] 09 select num from test_test group by num; 10 受影响的行: 0 11 时间: 0.031ms
二、num字段上创建索引
1 ALTER TABLE `test_test` ADD INDEX `num_index` (`num`) ;
再次查询
01 select distinct num from test_test; 02 select num from test_test group by num; 03 [SQL] select distinct num from test_test; 04 受影响的行: 0 05 时间: 0.000ms 06 07 [SQL] 08 select num from test_test group by num; 09 受影响的行: 0 10 时间: 0.000ms
这时候我们发现时间太小了 0.000秒都无法精确了。
我们转到命令行下 测试
01 mysql> set profiling=1; 02 mysql> select distinct(num) from test_test; 03 mysql> select num from test_test group by num; 04 mysql> show profiles; 05 +----------+------------+----------------------------------------+ 06 | Query_ID | Duration | Query | 07 +----------+------------+----------------------------------------+ 08 | 1 | 0.00072550 | select distinct(num) from test_test | 09 | 2 | 0.00071650 | select num from test_test group by num | 10 +----------+------------+----------------------------------------+
加了索引之后 distinct 比没加索引的 distinct 快了 107倍。
加了索引之后 group by 比没加索引的 group by 快了 43倍。
再来对比 :distinct 和 group by
不管是加不加索引 group by 都比 distinct 快。因此使用的时候建议选 group by
MySQL中distinct和group by性能比较[转]相关推荐
- MySQL中distinct和group by性能比较
MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...
- distinct mysql性能_MySQL中distinct和group by性能比较
MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...
- mysql+distinct+max_MySQL 中 distinct 和 group by 性能比较-Fun言
看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论 仅在个人计算机上测试,可能不全面,仅供参考 测试过程 准备一张测试表 CREATE TABLE `test_test` ( `id` ...
- distinct mysql性能_MySQL中distinct与group by之间的性能进行比较
最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...
- mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解
这篇文章主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下 在数据表中记录了用户验证时使用的书目,现在想取出所有书 ...
- sql 中distinct和group by
sql中distinct和group by都可以用于去重复,distinct是将重复的行从结果中出去,group by是按指定的列分组.区别是group by 中可以包含聚合函数. 如下所示的表结构, ...
- MySQL中distinct和distinctrow的区别
引用官方文档的内容MySQL中distinct和distinctrow的区别 原文:The ALL and DISTINCT modifiers specify whether duplicate r ...
- mysql+distinct+max_MySQL中distinct与group by之间的性能进行比较
最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...
- mysql中distinct走索引吗_MySQL中索引优化distinct语句及distinct的多字段操作
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用 ...
最新文章
- 自由自在休闲食品带给小资的冰淇淋生活
- copy所有的java文件到硬盘_将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad...
- 【youcans 的 OpenCV 例程 200 篇】101. 自适应中值滤波器
- python学习笔记全过程_Python学习笔记一(Hello World)
- python 与或非_Python的阶乘求和
- 如何提取明细表头_BIM/Revit常用技巧——如何添加项目参数
- 邯郸百亿斤粮食生产 国稻种芯·中国水稻节:河北大市粮食经
- easyconnect(mac版)总是初始化问题
- 【开源】STC12C5A60S2开发板
- grafana配置alert
- python编写年金终值函数_2021年高校邦Python程序设计基础【实境编程】课后习题答案...
- MySQL按指定字段自定义列表排序
- CAS配置数据库,实现数据库用户认证
- python迭代对象是什么意思_python的迭代对象
- react中使用AlipayJSBridge 支付宝支付调用接口在H5网页的应用
- js 实现对象转字符串
- 中国高分系列卫星介绍
- selenium2(webdriver)的“兄弟姐妹”
- linux下分区比例,安全地调整Linux分区大小的三种方法 | MOS86
- 计算机释放磁盘空间常用方法,释放硬盘空间的常用方法 【计算机与医学】
热门文章
- python判断数字位数_python求数字位数的方法
- 西工大计算机上岸经验-双非373
- 关于Connections could not be acquired from the underlying database
- OJB中的多表查询和更新
- 获取DataTable中的某一列及增加一行数据
- Atitit 怎么阅读一本书 消化 分析 检索 attilax总结 1 读书的本质 是数据的处理,大量的数据,处理能力
- [软件工具][windows]pdf指定区域OCR识别重命名工具使用教程
- 电脑上快速剪辑歌曲的方法
- android报错必须64位,64位系统使用Android虚拟机问题
- 度小满数据开发面试真题1