Mysql 这是正确且最快的查询吗?

Mysql 这是正确且最快的查询吗?,mysql,Mysql,我需要在下面的工作中优化SQL查询。 我有这些桌子: host: idhost table: idtable, idhost reservation: idtable, start, stop 我需要那些在2014-03-03 12:00-2014-03-03 14:00期间有空桌的主机 我使用这个查询,我确信它会返回正确的结果 SELECT idhost FROM idhost WHERE idhost NOT IN ( SELECT idhost FROM host INNER

我需要在下面的工作中优化SQL查询。 我有这些桌子:

host: idhost
table:  idtable, idhost
reservation: idtable, start, stop
我需要那些在2014-03-03 12:00-2014-03-03 14:00期间有空桌的主机

我使用这个查询,我确信它会返回正确的结果

SELECT idhost FROM idhost WHERE idhost NOT IN (
    SELECT idhost FROM host INNER JOIN table USING (idhost) INNER JOIN reservation USING (idtable)
        WHERE :start BETWEEN start AND stop OR :stop BETWEEN start AND stop OR :start < start AND stop > :stop)
但是有人说下面的查询速度更快,并且返回相同的主机,但我不确定:

SELECT * FROM host  
    JOIN table USING (idhost)  
        LEFT JOIN reservation ON reservation.idtable = table.idtable AND  
             :start >= reservation.start AND :stop <= reservation.stop  
WHERE reservation.idtable IS NULL 
它正确且更快吗?还是有更好的查询


提前谢谢你

试一下自己而不是问另外:试着解释语法如果你真的需要关于你的查询如何运行的深入信息,请看一下解释语句。查询看起来应该返回相同的数据,使用联接而不是子查询几乎总是更快,但是最好的办法是尝试一下并查看。在您的数据集上,情况可能会发生变化。但可能需要更多内存,@Jericon