我的印象是,你在查询中加入的表数越多,执行时间就越多,但在我的情况下发生了相反的事情。
以下是我要加入两个表的查询 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
如果有人可以帮助我了解这是如何实现的,那将会非常有帮助吗?