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

本文在个人电脑上进行了MySQL中distinct与group by的性能比较。测试结果显示,加索引后,group by在所有情况下都比distinct更快。作者建议在实际使用中根据需求选择group by。
摘要由CSDN通过智能技术生成

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

测试过程:

准备一张测试表

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

a62821d8aca994a5ce5fd2b06c305108.png

二、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

494d89e215f341bc6612b2cbeae9564c.png

这时候我们发现时间太小了 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 |

+----------+------------+----------------------------------------+

0a55fe29b36bc4fe00a709c578fc0e5c.png

分析:

加了索引之后distinct 比没加索引的distinct 快了107倍。加了索引之后group by 比没加索引的group by 快了43倍。再来对比 :distinct 和group by

不管是加不加索引group by 都比distinct 快。

因此使用的时候建议选group by。

以上就是在mysql中distinct与group by之间的性能进行比较的,通过以上比较是不是对distinct和group by有了更深入的了解,希望对大家的学习有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值