簡體   English   中英

MYSQL存在的地方執行時間過多

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM