web-dev-qa-db-fra.com

Comment se fait-il que la table `wp_options` ne possède pas d'index sur` autoload`?

Au début de chaque page servie par WordPress, il existe un appel MySQL pour rechercher des options:

SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';

Comme il n'y a pas d'index sur la colonne autoload, MySQL doit rechercher TOUTES les lignes.

Je suis également tombé sur le commentaire de cette réponse affirmant qu'il n'y aurait aucun gain de performance même s'il y avait un indice.

Dans mon application, j'ai utilisé beaucoup de valeurs transitoires pour remplacer la session. Ils ont très bien travaillé et j'ai mes propres routines de collecte des ordures. J'ai remarqué que dans la table wp_options, mes valeurs transitoires (celles commençant par _transient_) ont toutes autoload=no. Je prévois que le nombre de lignes de ma table wp_options augmentera parallèlement au nombre d'utilisateurs simultanés.

J'aimerais savoir pourquoi la table est conçue de cette façon. Et dois-je créer un index pour mon cas particulier?

15
He Shiming

Il n’existe pas d’indice parce que le besoin n’a jamais été assez fort.

Dans ticket # 14258 cela a été suggéré, mais comme la plupart des options utilisent autoload=yes par défaut, l'index serait de toute façon ignoré.

Il y a aussi le ticket encore ouvert # 24044 _Ajouter un index à wp_options pour aider/améliorer les performances_ .

Je pense que vous devriez créer un index. Il survivra aux mises à niveau. Cela n’aidera peut-être pas votre performance, mais vous pourrez ajouter de vraies données statistiques à ce ticket.

11
fuxia

J'exécutais 3 WP blogs sur une instance volumineuse de Squeeze Debian et cherchais à savoir pourquoi mysql était bloqué sur cet hôte à 200% d'utilisation du processeur et de charge du système entre 3 et 6. En regardant une 'liste de processus d'affichage' Dans mysql, nous avons compris que la table wp_option était impliquée dans ce problème et nous avons donc exécuté:

alter table wp_options add index autoload_idx(`autoload`);

Après cette opération, la charge de mysql, comme indiqué dans la partie supérieure, est tombée à 1% et la moyenne de charge d’instance est désormais de 0,10.

Nous utilisons des plugins, il pourrait donc y avoir une boucle quelque part dans le code, ce qui pourrait être une situation particulière, mais dans notre cas, le changement de performances est tout à fait étonnant.

Notre table wp_options a 347 lignes.

5
Fabio Pedrazzoli