8
votes

Quelle requête de date MySQL fonctionne mieux?

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: xxx

seconde requête: xxx

Merci d'avance.


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.

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é.

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: xxx


3 commentaires

Pourquoi ne-tu pas la benchmark la toi-même?


CAVEAT: entre '2010-01-01' et '2010-12-31' fait quelque chose légèrement 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'


@DBemerlin: Parce que les autres (comme moi) peuvent venir voir les réponses et les résultats des autres.


4 Réponses :


2
votes

Vous pouvez utiliser le profileur de requête pour voir exactement combien de temps chacun prend:

http://dev.mysql.com /Tech-Resources/articles/Utilisation-new-query-profiler.html

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.

Assurez-vous de revenir ici avec votre réponse :)


1 commentaires

merci David. J'ai eu une certaine recherche et édité ma question. pour votre information



0
votes

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.

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.


0 commentaires

13
votes

Si vous avez un index sur post_date (que je recommanderais si vous souhaitez exécuter cette requête souvent), alors le entre Query peut l'utiliser . Une fois que vous avez mis une colonne dans une fonction ( année (Post_Date) ), 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>).

Consultez la sortie de Expliquer Sélectionnez 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.

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.


2 commentaires

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.



1
votes

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


2 commentaires

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 ^ _ ^