В соответствии с MySQL архитектурой и принципами оптимизации скорости
запрос JOIN
как подзапрос не является хорошей практикой
попытаться напрямую присоединиться к основному запросу
Ваш текущий запрос пытается выполнить
таблица posts
и postmeta
объединены с шестью объединениями, объединить его как часть основной запрос, причина в том, что основной запрос также выполняет выборку на posts
таблице
Может быть, вы можете попробовать это
SELECT
tbl1.ID AS vendor_id,
tbl1.post_title AS vendor_name,
COUNT(tbl1.ID) AS featured_stackies
FROM {$wpdb->prefix}posts tbl1
LEFT JOIN {$wpdb->prefix}postmeta as tbl3 ON tbl1.ID=tbl3.post_id AND tbl3.meta_key = 'vendor-ap'
LEFT JOIN {$wpdb->prefix}postmeta as tbl4 ON tbl1.ID=tbl4.post_id AND tbl4.meta_key = 'vendor-as'
LEFT JOIN {$wpdb->prefix}postmeta as tbl5 ON tbl1.ID=tbl5.post_id AND tbl5.meta_key = 'vendor-data'
LEFT JOIN {$wpdb->prefix}postmeta as tbl6 ON tbl1.ID=tbl6.post_id AND tbl6.meta_key = 'vendor-management'
LEFT JOIN {$wpdb->prefix}postmeta as tbl7 ON tbl1.ID=tbl7.post_id AND tbl7.meta_key = 'vendor-sr'
LEFT JOIN {$wpdb->prefix}postmeta as tbl8 ON tbl1.ID=tbl8.post_id AND tbl8.meta_key = 'vendor-ae'
WHERE tbl1.post_type = 'vendor-stacks'
AND tbl1.post_status = 'publish'
AND tbl1.post_title LIKE '%".$get_query."%'
AND ( tbl1.post_type = 'company-stacks'
AND tbl1.post_status = 'publish')
AND tbl3.meta_value LIKE CONCAT('%\"',tbl1.ID, '\"%')
OR tbl4.meta_value LIKE CONCAT('%\"',tbl1.ID, '\"%')
OR tbl5.meta_value LIKE CONCAT('%\"',tbl1.ID, '\"%')
OR tbl6.meta_value LIKE CONCAT('%\"',tbl1.ID, '\"%')
OR tbl7.meta_value LIKE CONCAT('%\"',tbl1.ID, '\"%')
OR tbl8.meta_value LIKE CONCAT('%\"',tbl1.ID, '\"%')
GROUP BY tbl1.ID ORDER BY featured_stackies DESC LIMIT 12 OFFSET 0
Приведенный выше запрос сделает обработку простой, как показано ниже
Также измените порядок условия WHERE
на основе приведенного ниже правила
Оптимизация 1:
какой ключ или первичный ключ в WHERE
уменьшит данные до минимума, а затем перенесет это сравнение на передний план в последовательности условий сравнения
Например, : tbl1.post_type = 'vendor-stacks' AND tbl1.post_status = 'publish' AND tbl1.post_type = 'company-stacks'
, если company-stacks
собирается сделать вашу 200-ю дату 10, измените последовательность на
tbl1.post_type = 'company-stacks' AND tbl1.post_status = 'publish' AND tbl1.post_type = 'vendor-stacks'