Может ли заказ почтового списка по meta_value вызвать проблему производительности?

Для некоторого уточнения кода и добавления новых функций в мой плагин я хочу отображать сообщения, упорядоченные по определенному значению мета-столбца, как это;

query_posts($query_string . '&meta_key=views&orderby=meta_value&order=DESC'); 

Может ли это вызвать проблемы с производительностью для больших блогов с общим количеством сообщений более 10000+?

  • Я могу использовать WP_Query () или get_posts () вместо query_post ()

поведение meta_query & tax_query

Когда вы определяете meta/tax_query и используете новый список аргументов стиля массива для нескольких наборов терминов или настраиваемых ключей полей, тогда ваш запрос может быть близок к следующему

 array( 'tax_query' => array( 'relation' => 'OR', array('taxonomy' => 'tax1', 'field' => 'slug', 'terms' => 'term1'), array('taxonomy' => 'tax2', 'field' => 'slug', 'terms' => 'term2'), ) ) 

Это было бы результатом:

 SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_relationships AS tt1 ON (wp_posts.ID = tt1.object_id) WHERE 1=1 AND ... AND (wp_term_relationships.term_taxonomy_id IN (XXX) OR tt1.term_taxonomy_id IN (YYY) ) ... 

Пример кода, взятого из этого тракового билета @Otto . Пожалуйста, подпишитесь там, чтобы следить за его прогрессом и проголосовать за изменение в ядре.

Проблема с запросом …

… в основном, вы получите JOIN для каждого столбца. Это необязательно, так как таблицы уже расплавлены вместе с 1- м JOIN . К сожалению ядро ​​просто ведет себя так, как в текущем состоянии 3.3.x, и останется таким, как это в 3.4.

Может быть, решение?

Ваш лучший шанс – перехватить фильтр posts_clauses в вашем плагине и вручную изменить запрос. Реальная проблема с этим решением заключается в том, что вам нужно будет выполнить str_replace( $search, $replace, $query ); в вашем плагине. С одной стороны, это может замедлить работу, а с другой стороны вам придется следовать этому билете, как только это произойдет, ваш плагин просто сломается (лучше оставьте ссылку на билет в вашем коде плагинов).

Что я могу сделать?

Перейдите в trac и добавьте свои мысли и патчи в билет . Если вы настоящий герой, вы также можете попытаться meta_query проблему meta_query .

Сообщество поблагодарит вас 🙂

Если вы считаете, что это img не подходит, просто удалите его.