J'ai une requête qui peut être exprimée de 2 façons différentes avec les mêmes résultats. Lequel est préférable - pour la performance ou d'autres raisons?
première requête: p> seconde requête: p> Merci d'avance. P> Après la suggestion d'analyse comparative, j'ai eu des recherches et des tests. Mes tests n'étaient pas des points de repère à cause de certains problèmes sur mon ordinateur, mais ils m'ont donné une idée. P> J'ai testé ma table 4000 rangée et il n'y avait pas une différence importante. Entre la commande était de plus de 0,01 à 0,02 sec de l'année (Post_Date) à 0,09 temps de requête total. Il semble utiliser une année (Post_Date) serait bon pour la performance et la convivialité. P> et j'ai appris que pendant les recherches; Si des heures ou des minutes ne sont pas si importantes, entre cela pourrait être utilisé comme celui-ci: p>
4 Réponses :
Vous pouvez utiliser le profileur de requête pour voir exactement combien de temps chacun prend: p>
http://dev.mysql.com /Tech-Resources/articles/Utilisation-new-query-profiler.html P>
Pour être précis, vous souhaiterez bien sûr tester chacun plusieurs fois et vous assurer que rien d'autre ne fonctionne sur le système. P>
Assurez-vous de revenir ici avec votre réponse :) P>
merci David. J'ai eu une certaine recherche et édité ma question. pour votre information
Je suis d'accord avec les autres affiches - essayez simplement, puisque vous avez les deux requêtes disponibles. Il n'y a pas de meilleur test que ça. P>
Si je devais deviner (qui est toujours une mauvaise idée!) Ce qui est plus rapide, je dirais que si Post_Date est indexé, le premier serait plus rapide car il peut utiliser l'index pour récupérer les lignes correspondantes. S'il n'y a pas d'index, alors toute différence entre les deux sera marginale. P>
Si vous avez un index sur Consultez la sortie de Bien sûr, repère votre code et voir par vous-même - mais en général, utiliser des fonctions dans où est plus lent. P> post_date code> (que je recommanderais si vous souhaitez exécuter cette requête souvent), alors le entre code> Query peut l'utiliser . Une fois que vous avez mis une colonne dans une fonction ( année (Post_Date) code>), MySQL n'utilise plus l'index de la colonne. Il doit donc passer à travers toutes les lignes (qui s'appelle une analyse de table / code>). p>
Expliquer Sélectionnez CODE> avec vos requêtes ( Vérifiez ce tutoriel ) et voyez quels résultats vous obtiendrez - s'il y a un index utilisable, vous devriez voir la différence clairement. P>
Merci Piskvor. J'ai eu une certaine recherche et édité ma question. pour votre information
Je vous en prie. À 4000 lignes, la différence est en effet non pertinente.
Comme les autres disent, vous pouvez mesurer vous-même les performances relatives vous-même.
SELECT post_id FROM posts WHERE YEAR(post_date)=2010
Bon point - lisible c'est, mais l'échelle qu'elle ne le fait pas; au-dessus de quelques milliers de lignes, problèmes de performance que vous pourriez avoir;)
Je pense que je choisirais aussi ceci ^ _ ^
Pourquoi ne-tu pas la benchmark la toi-même?
CAVEAT:
entre '2010-01-01' et '2010-12-31' code> fait quelque chose légèrement i> surprenant: n'inclut pas le dernier jour, car il est étendu en interne àentre '2010-01-01 00:00:00' et '2010-12-31 00:00:00' code>@DBemerlin: Parce que les autres (comme moi) peuvent venir voir les réponses et les résultats des autres.