加入更多表可缩短执行时间

时间:2016-06-16 10:44:44

标签: mysql database join sqlperformance sql-optimization

我的印象是,你在查询中加入的表数越多,执行时间就越多,但在我的情况下发生了相反的事情。

以下是我要加入两个表的查询 task_group_attempt task_group -

select count(*) from (
select ga.id, ga.task_group_id from task_group_attempt ga 
where ga.started_on >= '2015-05-30 18:30:00' and ga.started_on < '2015-06-30 18:30:00'
) tab1 
inner join task_group tg on tg.id = tab1.task_group_id and tg.task_group_type_id != 6

它返回的值是 585856 ,执行时间是 17.6秒

对于表task_group_attempt id 是主键,并且已对列 task_group_id 进行索引。

对于表task_group id 是主键,并且已对列 task_group_type_id 进行索引。

现在第二个查询只是第一个查询的扩展,在这里我们又加入一个名为 task_attempt 的表 -

select count(*) from (
select ga.id, ga.task_group_id from task_group_attempt ga 
where ga.started_on >= '2015-05-30 18:30:00' and ga.started_on < '2015-06-30 18:30:00'
) tab1 
inner join task_group tg on tg.id = tab1.task_group_id and tg.task_group_type_id != 6
inner join task_attempt ta on tab1.id = ta.task_group_attempt_id

它返回的值是 1109682 ,执行时间是 7.88秒

对于表task_attempt已对列 task_group_attempt_id 进行索引。

我已经多次检查过,每次查询执行时间几乎或接近上述时间。

添加信息 -

task_group_attempt中的行数为8565011
task_group中的行数为1057
task_attempt中的行数为15156598

如果有人可以帮助我了解这是如何实现的,那将会非常有帮助吗?

0 个答案:

没有答案