Pour affiner le code et ajouter de nouvelles fonctionnalités à mon plugin, je souhaite afficher les publications classées par valeur de colonne méta spécifique, comme ceci;
query_posts($query_string . '&meta_key=views&orderby=meta_value&order=DESC');
Peut-il causer des problèmes de performances pour les gros blogs ayant plus de 10000 messages au total?
Lorsque vous définissez un meta/tax_query
et que vous utilisez la nouvelle liste d'arguments de style de tableau pour plusieurs ensembles de clés de champ personnalisées ou de termes, votre requête peut ressembler à ce qui suit
array(
'tax_query' => array(
'relation' => 'OR',
array('taxonomy' => 'tax1', 'field' => 'slug', 'terms' => 'term1'),
array('taxonomy' => 'tax2', 'field' => 'slug', 'terms' => 'term2'),
)
)
Ce serait le résultat:
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) ) ...
Exemple de code tiré de ce ticket de traçage par @Otto . Veuillez vous y abonner pour suivre ses progrès et voter pour obtenir un changement de base.
… Est fondamentalement que vous obtiendrez une JOIN
pour chaque colonne. Ce n'est pas nécessaire, car les tables sont déjà fondues avec le 1st JOIN
. Malheureusement, le noyau se comporte simplement comme cela dans l'état actuel 3.3.x et restera comme cela dans 3.4.
Votre meilleure chance serait d'intercepter le filtre posts_clauses
dans votre plugin et de modifier manuellement la requête. Le vrai problème avec cette solution est que vous devez faire un str_replace( $search, $replace, $query );
dans votre plugin. D'une part, cela peut ralentir les choses et, d'autre part, vous devrez suivre ce ticket, car lorsque ce dernier entrera, votre plugin sera tout simplement cassé (mieux vaut laisser un lien vers le ticket dans le code de votre plugin).
Sautez dans trac et ajoutez vos pensées et vos correctifs au ticket . Si vous êtes un véritable héros, vous pouvez également essayer de résoudre le problème meta_query
également.
La communauté vous remercierait :)
Si vous pensez que cette image est inappropriée, supprimez-la simplement.