[英]MYSQL WHERE EXISTS taking too much time to execute
我在MYSQL
查詢中使用WHERE EXISTS
,但是執行時間太長。 你們能告訴我如何加快此查詢的速度或向我提出其他替代查詢的建議。
這是我的查詢
SELECT a.property_id, count( a.booking_id ) AS total_bookings, group_concat( concat( date_format( a.check_in, '%m/%d/%Y' ) , ' To ', date_format( a.check_out, '%m/%d/%Y' ) , ' ', '(', (
CASE a.book_status
WHEN 1
THEN 'Pending'
WHEN 3
THEN 'Confirm'
END
), ')', ' |
<a href=\'manage_booking.php?action=ed&id=', a.booking_id, '\' target=_blank class=linkun >View Detail</a>', '<br>' ) ) AS dates
FROM apl_property_booking AS a
WHERE EXISTS (
SELECT booking_id
FROM apl_property_booking AS b
WHERE b.booking_id != a.booking_id
AND b.property_id = a.property_id
AND (
b.check_in < a.check_out
AND a.check_in < b.check_out
)
AND b.book_status
IN ( 1, 3 )
AND (
'2015-04-01' <= date_add( b.check_out, INTERVAL -1
DAY )
AND '2015-04-27' >= date_add( b.check_in, INTERVAL +1
DAY )
)
)
AND a.book_status
IN ( 1, 3 )
AND (
'2015-04-01' <= date_add( a.check_out, INTERVAL -1
DAY )
AND '2015-04-27' >= date_add( a.check_in, INTERVAL +1
DAY )
)
GROUP BY a.property_id
ORDER BY a.check_in DESC
LIMIT 0 , 30
我通過刪除MYSQL
WHERE EXISTS
並替換為LEFT JOIN
解決了它。 使用WHERE EXISTS
查詢執行“ 37.4117秒”,而使用LEFT JOIN
查詢執行“ 0.0097秒”
這是我的新查詢
SELECT a.property_id, count( a.booking_id ) AS total_bookings, group_concat( concat( date_format( a.check_in, '%m/%d/%Y' ) , ' To ', date_format( a.check_out, '%m/%d/%Y' ) , ' ', '(', (
CASE a.book_status
WHEN 1
THEN 'Pending'
WHEN 3
THEN 'Confirm'
END
), ')', ' |
<a href=\'manage_booking.php?action=ed&id=', a.booking_id, '\' target=_blank class=linkun >View Detail</a>', '<br>' ) ) AS dates
FROM apl_property_booking AS a
LEFT JOIN apl_property_booking AS b ON b.property_id = a.property_id
WHERE
b.booking_id != a.booking_id AND
(b.check_in < a.check_out
AND a.check_in < b.check_out
)
AND b.book_status
IN ( 1, 3 )
AND (
'2015-04-01' <= date_add( b.check_out, INTERVAL -1
DAY )
AND '2015-04-27' >= date_add( b.check_in, INTERVAL +1
DAY )
)
AND a.book_status
IN ( 1, 3 )
AND (
'2015-04-01' <= date_add( a.check_out, INTERVAL -1
DAY )
AND '2015-04-27' >= date_add( a.check_in, INTERVAL +1
DAY )
)
GROUP BY a.property_id
ORDER BY a.check_in DESC
LIMIT 0 , 30
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.