jquery - MYSQL WHERE EXISTS 执行时间过长

标签 jquery mysql

我在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

关于jquery - MYSQL WHERE EXISTS 执行时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29912185/

相关文章:

jquery - $.getJSON() 不适用于 chrome,为什么?

javascript - 将 Switchery 封装在指令 VueJS 中

php - 安装 PHP PDO 的 zlib 目录

mysql - SQL 查找下一个可用的字符串键

jquery columnizer 和显示 :none

javascript - 在同一页面上处理来自 ajax 驱动的 Fancybox 元素的 PHP 请求

javascript - JQuery 验证未在电子邮件字段中实现 'required'

mysql - 从 LIST 扩展名的文件中导入数据

php - 在另一个表中发生不相关的插入操作后,Mysql 行被删除

mysql-server 无法在 Linux 上安装