具有日期范围的MySQL查询优化

时间:2018-05-01 10:14:00

标签: mysql

感谢您的阅读。我有一个预订系统,我试图搜索可用性,但查询需要花费大量的时间来运行。有没有人对如何让它更快地运行有任何指示?

java.lang.NoClassDefFoundError表是2015年至2030年的每个日期的列表。 dates表是属性的可用日期的日期范围 property_bands表是所有预订的列表

当我在没有booking_properties表的情况下运行以下查询时,查询需要0.17秒,但是使用"左连接"这需要54秒。

booking_properties

我正在尝试重写我在2009年写过的查询,该查询一直运行良好但随着客户端平台的增长,系统变得越来越慢。这是原始查询,目前需要14秒才能运行。

SET @start = '2018-05-01' , @end = '2018-05-04';

select * from `dates`

left join `property_bands` on property_bands.propband_start <= dates.day_date
and property_bands.propband_end >= dates.day_date

left join `booking_properties` on booking_properties.property_id = property_bands.property_id
and(
    (
        booking_properties.bprop_start <= @start
        and booking_properties.bprop_end >= @end
    )
    or(
        booking_properties.bprop_start >= @start
        and booking_properties.bprop_start < @end
    )
    or(
        booking_properties.bprop_end > @start
        and booking_properties.bprop_end <= @end
    )
)
and(
    booking_properties.bprop_deleted = '0000-00-00 00:00:00'
    or booking_properties.bprop_deleted > now()
)
and booking_properties.bprop_void < 1
where
    dates.day_date >= @start and dates.day_date < @end

0 个答案:

没有答案