Mysql 当有很多Posteta时,query_posts()会很慢
我在Mysql 当有很多Posteta时,query_posts()会很慢,mysql,wordpress,Mysql,Wordpress,我在wp_posts中有大约300k的数据,在wp_postmeta中有大约500k的数据,每次调用这个查询大约需要5~7秒,我需要做什么/更改来优化它?因为这个查询太慢了 SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_posts.*, po.meta_value as postorder, rent_status.meta_value as status, STR_TO_DATE(CONCAT(a_year.meta_value,
wp_posts
中有大约300k的数据,在wp_postmeta
中有大约500k的数据,每次调用这个查询大约需要5~7秒,我需要做什么/更改来优化它?因为这个查询太慢了
SELECT
SQL_CALC_FOUND_ROWS DISTINCT wp_posts.*,
po.meta_value as postorder, rent_status.meta_value as status,
STR_TO_DATE(CONCAT(a_year.meta_value, "-", a_month.meta_value, "-", "01"), "%Y-%m-%d") AS available_date
FROM wp_posts
LEFT JOIN wp_postmeta otm ON ( otm.post_id = wp_posts.ID AND otm.meta_key = "off_the_market" )
LEFT JOIN wp_postmeta AS po ON (wp_posts.ID = po.post_id AND po.meta_key='post_order')
INNER JOIN wp_postmeta a_month ON (a_month.post_id=wp_posts.ID AND a_month.meta_key="available_month")
INNER JOIN wp_postmeta a_year ON (a_year.post_id=wp_posts.ID AND a_year.meta_key="available_year")
INNER JOIN wp_postmeta rent_status ON (rent_status.post_id=wp_posts.ID AND rent_status.meta_key="status")
WHERE
1=1
AND wp_posts.post_type = 'post'
AND wp_posts.post_status = 'publish'
AND ((otm.meta_value IS NOT NULL AND otm.meta_value <> "yes") OR otm.meta_value IS NULL )
AND (rent_status.meta_value<>"N" OR (rent_status.meta_value="N" AND STR_TO_DATE(CONCAT(a_year.meta_value,"-",a_month.meta_value,"-","01"), "%Y-%m-%d") BETWEEN CAST("2020-11-01" as DATE) AND CAST("2021-05-04" as DATE)))
ORDER BY
available_date ASC,
postorder*1 DESC,
status DESC
LIMIT 0, 12
array(
'posts_per_page' => 12,
'paged' => $paged,
'post_status' => 'publish',
'cache_results' => false
);