之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论(仅在个人计算机上测试,可能不全面,仅供参考)

测试过程:

准备一张测试表

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性能比较[转]相关推荐

  1. MySQL中distinct和group by性能比较

    MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...

  2. distinct mysql性能_MySQL中distinct和group by性能比较

    MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...

  3. mysql+distinct+max_MySQL 中 distinct 和 group by 性能比较-Fun言

    看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论 仅在个人计算机上测试,可能不全面,仅供参考 测试过程 准备一张测试表 CREATE TABLE `test_test` ( `id` ...

  4. distinct mysql性能_MySQL中distinct与group by之间的性能进行比较

    最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...

  5. mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解

    这篇文章主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下 在数据表中记录了用户验证时使用的书目,现在想取出所有书 ...

  6. sql 中distinct和group by

    sql中distinct和group by都可以用于去重复,distinct是将重复的行从结果中出去,group by是按指定的列分组.区别是group by 中可以包含聚合函数. 如下所示的表结构, ...

  7. MySQL中distinct和distinctrow的区别

    引用官方文档的内容MySQL中distinct和distinctrow的区别 原文:The ALL and DISTINCT modifiers specify whether duplicate r ...

  8. mysql+distinct+max_MySQL中distinct与group by之间的性能进行比较

    最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...

  9. mysql中distinct走索引吗_MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用 ...

最新文章

  1. 自由自在休闲食品带给小资的冰淇淋生活
  2. copy所有的java文件到硬盘_将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad...
  3. 【youcans 的 OpenCV 例程 200 篇】101. 自适应中值滤波器
  4. python学习笔记全过程_Python学习笔记一(Hello World)
  5. python 与或非_Python的阶乘求和
  6. 如何提取明细表头_BIM/Revit常用技巧——如何添加项目参数
  7. 邯郸百亿斤粮食生产 国稻种芯·中国水稻节:河北大市粮食经
  8. easyconnect(mac版)总是初始化问题
  9. 【开源】STC12C5A60S2开发板
  10. grafana配置alert
  11. python编写年金终值函数_2021年高校邦Python程序设计基础【实境编程】课后习题答案...
  12. MySQL按指定字段自定义列表排序
  13. CAS配置数据库,实现数据库用户认证
  14. python迭代对象是什么意思_python的迭代对象
  15. react中使用AlipayJSBridge 支付宝支付调用接口在H5网页的应用
  16. js 实现对象转字符串
  17. 中国高分系列卫星介绍
  18. selenium2(webdriver)的“兄弟姐妹”
  19. linux下分区比例,安全地调整Linux分区大小的三种方法 | MOS86
  20. 计算机释放磁盘空间常用方法,释放硬盘空间的常用方法 【计算机与医学】

热门文章

  1. python判断数字位数_python求数字位数的方法
  2. 西工大计算机上岸经验-双非373
  3. 关于Connections could not be acquired from the underlying database
  4. OJB中的多表查询和更新
  5. 获取DataTable中的某一列及增加一行数据
  6. Atitit 怎么阅读一本书 消化 分析 检索 attilax总结 1 读书的本质 是数据的处理,大量的数据,处理能力
  7. [软件工具][windows]pdf指定区域OCR识别重命名工具使用教程
  8. 电脑上快速剪辑歌曲的方法
  9. android报错必须64位,64位系统使用Android虚拟机问题
  10. 度小满数据开发面试真题1