使用相同的表优化从子选择中进行选择

时间:2016-05-09 22:21:41

标签: mysql sql

您如何优化此查询目前需要10秒?我需要选择具有在具有特定条件的子查询中过滤的所有内容的ID。

select temp.ip, vas_updates.setting, vas_updates.version
from (select count(id_update) as counter, ip
      from vas_updates
      where date(date)="2016-05-09" and
            time(date) between("14:00:00")  and ("23:00:00")
      group by ip
      having counter =2
     ) temp, vas_updates
 where vas_updates.ip = temp.ip
 order by ip;

我打赌它花了这么多时间,因为查询有from temp, vas_updates,有没有办法隔离"最后一个查询"?

1 个答案:

答案 0 :(得分:1)

我会把它写成:

select i.ip, u.setting, u.version
from (select count(id_update) as counter, ip
      from vas_updates
      where date between '2016-05-09 14:00:00' and '2016-05-09 23:00:00'
      group by ip
      having counter = 2
     ) i join
     vas_updates u
     on u.ip = i.ip
 order by ip;

然后vas_updates(date, ip)vas_updates(ip)上的索引应该会有所帮助。

相关问题