有没有办法比这个更快地创建SQL查询?

时间:2017-11-20 09:04:07

标签: mysql sql performance

我有一个MySQL表,用于存储酒店预订的数据。 我需要一个查询来查看每个日期住在酒店的客人数量。

我能够创建一个查询(使用子查询),但执行速度非常慢。有没有更好的方法来获取所请求的数据? (例如,将表连接到自身,或者其他任何内容。)

我的查询是:

SELECT CheckOutDate AS Date, 
    (SELECT SUM(NrOfGuests) FROM tblGuests tG 
    WHERE tG.CheckInDate <= tblGuests.CheckOutDate 
    AND tG.CheckOutDate > tblGuests.CheckOutDate 
    AND tG.IsCancelled = False AND tG.NoShow = False) 
AS NrOfGestsStaying 
FROM tblGuests 
GROUP BY CheckOutDate

使其表现更快的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

在原始查询中,SELECT使用子查询在表的每一行上返回SUM。之后使用group by CheckOutDate删除重复项。换句话说,这是SUM(NrOfGuests)的{​​{1}}。

您可以通过子distinct CheckOutDate来提前删除重复的CheckOutDate。因此,在接收查询中,SUM仅应用distinct CheckOutDate

一次
distinct CheckOutDate