Mysql
 sql >> Base de données >  >> RDS >> Mysql

MIN/MAX vs ORDER BY et LIMIT

Dans le pire des cas, où vous regardez un champ non indexé, en utilisant MIN() nécessite un seul passage complet de la table. Utilisation de SORT et LIMIT nécessite un tri de fichiers. S'il est exécuté sur une grande table, il y aura probablement une différence significative dans les performances perçues. En tant que point de données anecdotique, MIN() a pris 0,36s pendant que SORT et LIMIT pris .84s contre une table de 106 000 lignes sur mon serveur de développement.

Si, toutefois, vous regardez une colonne indexée, la différence est plus difficile à remarquer (le point de données sans signification est de 0,00 dans les deux cas). En regardant la sortie d'expliquer, cependant, cela ressemble à MIN() est capable d'extraire simplement la plus petite valeur de l'index (lignes "Sélectionner les tables optimisées" et "NULL") alors que le SORT et LIMIT doit encore faire un parcours ordonné de l'index (106 000 lignes). L'impact réel sur les performances est probablement négligeable.

Il ressemble à MIN() est la voie à suivre - c'est plus rapide dans le pire des cas, impossible à distinguer dans le meilleur des cas, c'est du SQL standard et exprime le plus clairement la valeur que vous essayez d'obtenir. Le seul cas où il semble que l'utilisation de SORT et LIMIT serait souhaitable serait, comme mson mentionné, où vous écrivez une opération générale qui trouve les valeurs N supérieures ou inférieures à partir de colonnes arbitraires et cela ne vaut pas la peine d'écrire l'opération de cas particulier.