MySQL中distinct和group by性能比较[转]

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

测试过程:

准备一张测试表

1CREATE 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))02begin03

04 declare max_num int(11) default 100000;05 declare i int default 0;06 declarerand_num int;07

08 select count(id) into max_num from test_test;09

10 while i < pa do

11 if max_num < 100000then12 select cast(rand()*100 asunsigned) into rand_num;13insert 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);

开始测试:(不加索引)

01select distinct num from test_test;02select num from test_test group by num;03

04[SQL] select distinct num from test_test;05 受影响的行: 0

06 时间: 0.078ms07

08[SQL]09select num from test_test group by num;10 受影响的行: 0

11 时间: 0.031ms

二、num字段上创建索引

1 ALTER TABLE `test_test` ADD INDEX `num_index` (`num`) ;

再次查询

01select distinct num from test_test;02select num from test_test group by num;03[SQL] select distinct num from test_test;04 受影响的行: 0

05 时间: 0.000ms06

07[SQL]08select 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

distinct mysql性能_MySQL中distinct和group by性能比较相关推荐

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

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

  2. mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论_MySQL...

    在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...

  3. mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论

    在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...

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

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

  5. mysql explain key为空_MySQL中explain的使用以及性能分析

    原标题:MySQL中explain的使用以及性能分析 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性 ...

  6. web获取多行mysql结果_mysql中的多行查询结果合并成一个

    SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...

  7. mysql ( )连接_MySQL中concat函数(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...

  8. mysql not in 性能_SQL中Execpt和not in 性能区别

    本文章介绍关于SQL中Execpt和not in 性能区别 ,有需要的同学可以仔细的看看这两个的性能哦. 主要讲 except 和 not in 的性能上的区别. 代码如下 复制代码 CREATE T ...

  9. mysql 互斥_MySql中互斥量mutex的实现

    数据库中的Mutex量指的是一种用于保护一些临界资源的使用的信号量.当有线程需要使用这些临界资源时,会请求获得mutex量,请求成功的线程进入临界区,而请求失败的线程只能等待它释放这个mutex.互斥 ...

最新文章

  1. 织梦在哪写html,织梦专题页去.html后缀的方法
  2. UI设计师面试时如何介绍自己?
  3. jQuery日期和时间插件(jquery-ui-timepicker-addon.js)中文破解版使用
  4. 视频目标检测跟踪--Detect to Track and Track to Detect
  5. python 财务报表审计_python 自动化审计
  6. 如果编程语言是女孩子
  7. 本周学习总结JAVA
  8. java channel源码_Netty 4.0 源码分析(三):Channel和ChannelPipeline
  9. 学python可以做什么-学会Python后都能做什么?介绍五种Python的实用场景
  10. DatePicker 和 DatePickerDialog的基本使用方法
  11. 成为一名嵌入式Linux开发工程师需要学习哪些知识?
  12. Proxomitron之天涯只看规则
  13. ae合成设置快捷键_(精品)AE从小白到大神之路(一)-AE入门
  14. 2022世界杯看球指南
  15. ucos 入门 --- 资料收集
  16. No.053<软考>《(高项)备考大全》【冲刺7】《软考之 119个工具 (5)》
  17. Android OpenGL ES 3.0 PBO像素缓冲区对象
  18. Linux-线程安全
  19. 一张照片的启示:你的冷暖我知道!
  20. 【Steam VR 2.X】unity Skeleton Poser 骨骼姿势 编辑好手势后 运行时 抓取姿势会偏

热门文章

  1. LA2402 Fishnet 四边形面积
  2. opencv学习笔记(三)—— 利用图像金字塔进行图像无缝拼接,cv2.pyrDown() ,cv2.pyrUp()
  3. Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
  4. 基于mongodb的标签系统设计
  5. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(三)
  6. java Arrarlist中的add(int index,Object ojb)
  7. 基于网页网站在线视频点播系统 毕业设计毕设源码毕业论文开题报告参考(1)功能概要
  8. 如何不被程序员(RD)们嫌弃--写给那些血气方刚的产品经理(PM)
  9. 脑右下角出现金色小锁,进入系统缓慢,点击应用及各种操作反应缓慢或无反应,严重者电脑不断重启
  10. 网页使用的WindowMediaPlayer插件的问题22D6F312-B0F6-11D0-94AB-0080C74C7E95