2010-10-13 16 views
2

J'ai une requête comme celle-ci où je veux afficher des enregistrements triés dans un format paginé.Ordre d'exécution de ORDER BY et LIMIT dans une requête MySQL

Ceci est ma requête.

SELECT * FROM answers 
WHERE userid = '10' 
ORDER BY votes LIMIT 10, 20 

Les deux arguments à LIMIT seront utilisés pour générer l'affichage page par page d'enregistrements. Maintenant, mon problème est ORDER BY. Comment MySQL exécute-t-il cette requête?

1er chemin

  • Sélectionnez les enregistrements en fonction de filtres
  • Trier les
  • les limiter

2ème voie

  • Sélectionnez les enregistrements en fonction de filtres
  • les limiter
  • Trier les

Si je pense comme moteur MySQL, je voudrais mettre en œuvre 2, puisque je alors à trier moins dossiers?

Quelqu'un peut-il jeter un peu de lumière là-dessus?

Observe

Répondre

1

A SQL LIMITE sera dans toutes les bases de données fonctionne toujours sur le résultat d'une requête, il exécutera la requête avec le ORDER BY et ce résultat sera alors limité. C'est une exigence fonctionnelle, la base de données ne perse doit pas l'exécuter comme ça.

Ainsi, la 1ère voie.

+0

Cela prouve que je dois penser comme la pratique MySQL :) – vikmalhotra

2

Mysql suit la 1ère voie.

0

La première façon mentionnée par les deux dernières réponses. Du point de vue de l'utilisateur, la deuxième voie ne sera pas très utile de toute façon.

1

Si vous voulez votre 2ème chemin, essayez d'utiliser une sous-requête avec la limite, puis commandez.

Quelque chose comme:

SELECT * FROM 
(
    SELECT * FROM answers 
    WHERE userid = '10' 
    LIMIT 10 
) 
ORDER BY votes