accido
Новичок
Кратко о проблеме: в Wordpress класс WP_Query для выборки постов из БД - это тихий ужас, который без бубна нормально не по-используешь, кроме того вообще весь API по работе с БД у них основан на драйвере mysql. Вообщем, есть один запрос для выборки постов, атачей и терм-таксономий. Что лучше один запрос, или выбирать посты, атачи и термы отдельно( без GROUP BY)? И второй вопрос - можно ли улучшить большой запрос?
Сам запрос:
план запроса( mysql v.5.5.27 ):
Сам запрос:
PHP:
SELECT
GROUP_CONCAT( CAST( tr2.term_taxonomy_id AS CHAR ) SEPARATOR ',' ) ttid,
GROUP_CONCAT( CAST( tt2.taxonomy AS CHAR ) SEPARATOR ',' ) taxonomy,
GROUP_CONCAT( CAST( t2.term_id AS CHAR ) SEPARATOR ',' ) tid,
GROUP_CONCAT( CAST( t2.name AS CHAR ) SEPARATOR ',' ) tname,
GROUP_CONCAT( CAST( t2.slug AS CHAR ) SEPARATOR ',' ) tslug,
y.*
FROM (
SELECT
GROUP_CONCAT( CAST( p3.ID AS CHAR ) SEPARATOR ',' ) attaches,
m1.meta_value thumb_id,
p1.*
FROM (
SELECT p2.* FROM wp_posts p2 USE INDEX( PRIMARY, type_status_date )
WHERE p2.post_type='cars' AND p2.post_status='publish' AND p2.ID NOT IN (
SELECT tr1.object_id FROM wp_term_relationships tr1 USE INDEX( PRIMARY )
INNER JOIN wp_term_taxonomy tt1 USE INDEX( PRIMARY ) ON tt1.term_taxonomy_id = tr1.term_taxonomy_id
WHERE tt1.term_id IN ('179,278')
)
ORDER BY p2.post_date ASC
LIMIT 30 OFFSET 0 ) p1
LEFT OUTER JOIN wp_postmeta m1 USE INDEX( post_id, meta_key ) ON m1.post_id = p1.ID AND m1.meta_key='_thumbnail_id'
LEFT OUTER JOIN wp_posts p3 USE INDEX( type_status_date, post_parent )
ON p3.post_type = 'attachment' AND p3.post_status='inherit' AND p3.post_parent = p1.ID
GROUP BY p1.ID ORDER BY NULL
) y
LEFT OUTER JOIN wp_term_relationships tr2 USE INDEX( PRIMARY ) ON tr2.object_id = y.ID
LEFT OUTER JOIN wp_term_taxonomy tt2 USE INDEX( PRIMARY ) ON tt2.term_taxonomy_id = tr2.term_taxonomy_id
LEFT OUTER JOIN wp_terms t2 USE INDEX( PRIMARY ) ON t2.term_id = tt2.term_id
GROUP BY y.ID ORDER BY NULL