这个查询非常慢,而且我不确定我哪里出错会导致它太慢。
我猜这与flight_prices表有关 因为如果我删除那个连接,它会从16秒变为不到一个。
SELECT * FROM OPENQUERY(mybook,
'SELECT wb.booking_ref
FROM web_bookings wb
LEFT JOIN prod_info pi ON wb.location = pi.location
LEFT JOIN flight_prices fp ON fp.dest_date = pi.dest_airport + '' '' + wb.sort_date
WHERE fp.dest_cheapest = ''Y''
AND wb.inc_flights = ''Y''
AND wb.customer = ''12345'' ')
任何想法如何加快这种加入?
答案 0 :(得分:4)
您不太可能在flight_prices.dest_date上使用任何索引,因为您实际上没有加入另一个列,这会使优化器难以使用。
如果您可以更改架构,我会将其设置为flight_prices.dest_date分为两列dest_airport和dest_Date,因为它似乎是机场和日期的组合。如果你这样做,你可以像这样加入
fp.dest_date = wb.sort_date and fp.dest_airport = pi.dest_airport
答案 1 :(得分:3)
尝试使用EXPLAIN PLAN,查看数据库返回的内容。
如果您看到TABLE SCAN,则可能需要添加索引。
第二次加入对我来说很奇怪。我想知道是否可以改写。
答案 2 :(得分:3)
你的声明重新格式化给了我这个
SELECT wb.booking_ref
FROM web_bookings wb
LEFT JOIN prod_info pi ON wb.location = pi.location
LEFT JOIN flight_prices fp ON fp.dest_date = pi.dest_airport + ' ' + wb.sort_date
WHERE fp.dest_cheapest = 'Y'
AND wb.inc_flights = 'Y'
AND wb.customer = '12345'
我会确保以下字段有索引