2010-12-13 8 views
2

Je suis préoccupé par les performances d'une requête telle que SELECT * FROM user LIMIT 5 sur une très grande table utilisateur. Va-t-il sélectionner tous les enregistrements, puis limiter à 5?Quand la LIMITE est-elle appliquée? Va-t-il sélectionner tous les résultats avant de limiter?

Plus précisément sera la requête suivante, sélectionnez tous assetids avant de limiter ...

SELECT * FROM assets WHERE asset_id IN(1,2,3,4,5,6,7,8,9,10) LIMIT 5 

Je me rends compte qu'il n'a pas de sens d'inclure tous les ids dans la clause IN() si je limite mais je aime savoir comment se comporte mysql dans cette situation.

Merci.

Répondre

1

Cela dépend de votre requête. Voir cette page pour plus d'explications sur la façon dont LIMIT est appliquée: http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html

Pour cette requête spécifique, ce qui suit s'appliquerait: « Dès que MySQL a envoyé le nombre de lignes au client, il annule la requête à moins vous utilisez SQL_CALC_FOUND_ROWS. "

Espérons que ça aide.

0

Votre requête devra analyser toutes les lignes par colonne asset_id, donc vous feriez mieux d'avoir un index dessus. Dans mon expérience, vous voudriez toujours mettre une clause order by également, puisque le jeu de résultats sera interne (c'est-à-dire l'ordre inconnu), et vous ne sauriez pas pourquoi les 5 résultats ont été ceux que vous vouliez réellement.

+0

"Votre requête devra scanner" - Êtes-vous sûr? – zerkms