MySQL中distinct与group by之间的性能进行比较

作者:lijiao 时间:2024-01-15 05:01:56 

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

测试过程:

准备一张测试表 


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,groupby
0
投稿

猜你喜欢

  • 在layui下对元素进行事件绑定的实例

    2024-04-22 22:17:27
  • 如何用 Python 子进程关闭 Excel 自动化中的弹窗

    2023-10-16 15:47:32
  • 让MYSQL彻底支持中文

    2008-12-24 16:23:00
  • WEB2.0网页制作标准教程(1)选择什么样的DOCTYPE

    2007-11-13 12:57:00
  • MySQL-group-replication 配置步骤(推荐)

    2024-01-17 20:51:36
  • 解决thinkPHP 5 nginx 部署时,只跳转首页的问题

    2024-05-11 09:22:31
  • python包合集shutil示例代码详解

    2022-03-28 12:04:27
  • python调用cmd命令行制作刷博器

    2023-07-26 15:18:35
  • 配置SQL Server以允许远程连接

    2010-03-08 13:12:00
  • 使用 TRUNCATE TABLE 删除所有行

    2008-04-24 19:20:00
  • HMAC算法--asp源码

    2009-08-28 12:51:00
  • 开启Django博客的RSS功能的实现方法

    2022-06-16 02:02:04
  • 慎用 script 节点的 src 属性来传递参数

    2009-11-18 12:59:00
  • Python字符串hashlib加密模块使用案例

    2023-08-02 12:06:24
  • python实现K近邻回归,采用等权重和不等权重的方法

    2021-12-21 19:29:26
  • Django1.9 加载通过ImageField上传的图片方法

    2022-11-17 10:07:12
  • 国际上十四个优秀网页设计审核站

    2007-09-30 20:18:00
  • JSQL SQLProxy 的 php 版本代码

    2023-11-15 01:05:54
  • Numpy随机抽样的实现

    2022-06-24 07:18:02
  • PHP中大于2038年时间戳的问题处理方案

    2023-07-03 14:33:26
  • asp之家 网络编程 m.aspxhome.com