distinct和group by的效率比较

以下均在MySQL中测试比较

-- 创建一个测试表

create table tp_content(
id int not null,
title char(32) not null,
addtime date not null default '2000-01-01'
) engine = myisam default charset = utf8;

-- 修改sql语句的结束符
delimiter $
-- 创建一个存储过程,插入100万条测试数据
CREATE PROCEDURE load_data()
begin
declare i int default 0;
while i < 1000000
do
insert into tp_content values (i,replace(uuid(), '-', ''),adddate('2000-01-01',(rand(i)*36520) mod 3652));
set i = i + 1;
end while;
end
$

call load_data();
-- 修改回原来的结束符
delimiter ;

1、没有建立主键的对比

-- 运行distinct的sql语句

distinct和group by的效率比较_第1张图片

-- 运行group by的sql语句

distinct和group by的效率比较_第2张图片

2、建立主键的对比

-- 建立id主键
alter table tp_content add primary key(id);

distinct

distinct和group by的效率比较_第3张图片

group by

distinct和group by的效率比较_第4张图片

结论:

上面的例子可以看出:没有建立主键时,distinct查询的速度要比group by快一点(distinct的时间是30.934s,group by的时间是33.905s),而建立主键后group by和distinct的效率都提高了,但是两者的速度依然差不多(distinct的时间是2.753s,group by的时间是2.762s)。

由于个人电脑的性能比较差,查出的时间比较久,所以这里的时间只是相对时间,假如用更好性能的电脑做实验,时间会快,但是我想结论应该是差不多的。

你可能感兴趣的:(sqlserver,数据库,mysql,sql)