à High Performance MySQL à la page 159, ils parlent de briser des requêtes complexes en simples:MyISAM Performance: Rejoindre la décomposition?
Conversion
SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id=tag.id
JOIN post ON tag_post.post_id=post.id
WHERE tag.tag='mysql';
Pour
SELECT * FROM tag WHERE tag='mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id in (123,456,567,9098,8904);
Et faire en quelque sorte le réel vous joindre à votre demande. Ma question est de savoir si c'est une bonne idée quand la requête finale a une clause where avec quelques milliers d'identifiants qu'elle doit correspondre (la table elle-même a environ 500k entrées).
Ce que je veux dire est, il y aura une grande pénalité pour avoir une requête comme
SELECT * FROM post WHERE post.id in (123,456,567, ... <a few thousand IDs here> ... ,9098,8904);
au lieu de la jointure-déclaration ci-dessus? Cela aiderait-il à déplacer cette logique vers les procédures stockées dans la base de données (tout en considérant comment les procédures stockées sont mal implémentées dans MySQL)?
Consultez le lien suivant pour une comparaison des performances entre une grande clause IN et une table de jointure temporaire. http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/ –
merci, cette page était utile – Dexter