Php MySQL大查询调优
另一个开发人员给了我下面的MySQL查询,它非常慢,我尝试通过指定列而不是*来调整它,并使用一个between语句而不是lengthy IN语句,但它仍然非常慢 我将感谢任何帮助,我如何可以得到一个更快的页面加载从这个 背景:代码用于wordpress页面,该页面列出在指定日期内可用的属性Php MySQL大查询调优,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,另一个开发人员给了我下面的MySQL查询,它非常慢,我尝试通过指定列而不是*来调整它,并使用一个between语句而不是lengthy IN语句,但它仍然非常慢 我将感谢任何帮助,我如何可以得到一个更快的页面加载从这个 背景:代码用于wordpress页面,该页面列出在指定日期内可用的属性 SELECT DISTINCT(wposts.ID), wposts.*, wpostmeta5.meta_value as 'calendar' FROM DvCs_posts wposts LEFT
SELECT DISTINCT(wposts.ID), wposts.*, wpostmeta5.meta_value as 'calendar'
FROM DvCs_posts wposts
LEFT JOIN DvCs_postmeta wpostmeta5 ON ( wposts.ID = wpostmeta5.post_id AND wpostmeta5.meta_key = 'calendar' )
INNER JOIN DvCs_bookingtypes bookingtypes ON ( wpostmeta5.meta_value = bookingtypes.booking_type_id )
LEFT JOIN DvCs_term_relationships tr ON ( wposts.ID = tr.object_id AND tr.term_taxonomy_id = 1 )
WHERE wposts.post_type = 'post'
AND(
SELECT tt.term_id FROM DvCs_term_taxonomy tt WHERE tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.term_id = 1 ) IS NULL
AND (
( SELECT booking_id FROM DvCs_bookingdates bd2 WHERE bd2.booking_id IN ( (SELECT booking_id FROM DvCs_booking bookings WHERE bookings.booking_type = bookingtypes.booking_type_id ) ) AND bd2.booking_date BETWEEN '2014-06-27' and '2014-06-28' LIMIT 1 ) IS NULL
OR ( SELECT booking_id FROM DvCs_bookingdates bd2 WHERE bd2.booking_id IN ( (SELECT booking_id FROM DvCs_booking bookings WHERE bookings.booking_type = bookingtypes.booking_type_id ) ) AND bd2.booking_date BETWEEN '2014-07-04' and '2014-07-10' LIMIT 1 ) IS NULL
OR ( SELECT booking_id FROM DvCs_bookingdates bd2 WHERE bd2.booking_id IN ( (SELECT booking_id FROM DvCs_booking bookings WHERE bookings.booking_type = bookingtypes.booking_type_id ) ) AND bd2.booking_date BETWEEN '2014-07-11' and '2014-07-17' LIMIT 1 ) IS NULL
OR ( SELECT booking_id FROM DvCs_bookingdates bd2 WHERE bd2.booking_id IN ( (SELECT booking_id FROM DvCs_booking bookings WHERE bookings.booking_type = bookingtypes.booking_type_id ) ) AND bd2.booking_date BETWEEN '2014-06-28' and '2014-06-29' LIMIT 1 ) IS NULL
OR ( SELECT booking_id FROM DvCs_bookingdates bd2 WHERE bd2.booking_id IN ( (SELECT booking_id FROM DvCs_booking bookings WHERE bookings.booking_type = bookingtypes.booking_type_id ) ) AND bd2.booking_date BETWEEN '2014-07-05' and '2014-07-11' LIMIT 1 ) IS NULL
OR ( SELECT booking_id FROM DvCs_bookingdates bd2 WHERE bd2.booking_id IN ( (SELECT booking_id FROM DvCs_booking bookings WHERE bookings.booking_type = bookingtypes.booking_type_id ) ) AND bd2.booking_date BETWEEN '2014-07-12' and '2014-07-18' LIMIT 1 ) IS NULL
)
AND wposts.post_status = 'publish'
AND wposts.id NOT IN
(
SELECT ID FROM DvCs_posts p
INNER JOIN DvCs_term_relationships r ON p.id = r.object_id
INNER JOIN DvCs_term_taxonomy t ON r.term_taxonomy_id = t.term_taxonomy_id
WHERE p.post_type = 'post'
AND p.post_status = 'publish'
AND t.term_id = 29
)
ORDER BY RAND()
你能提供一些表格结构和样本数据吗?这对于理解瓶颈在哪里以及瓶颈是什么非常有用?您是否也可以共享
EXPLAIN EXTENDED
输出?EXPLAIN select distict。。。关于查询呢?慢的部分都是在WHERE中选择的。