2010-10-20 6 views

Répondre

4

Si vous spécifiez un LIMIT, MySQL va traiter la requête sans limite, puis lire juste avant jusqu'à ce qu'il atteigne le point limite.

En d'autres termes, si vous spécifiez LIMIT 50000,1, la base de données devra lire 50001 dossiers juste pour celui qui vous intéresse.

Si la limite est faible, cela ne compte pas vraiment, mais avec une limite haute, cela ajoutera beaucoup de temps à la requête.

Tout cela est couvert dans le lien que vous avez fourni (qui semble être une bonne ressource). Si vous faites ce genre de chose et avez besoin de performances sur un grand nombre de pages, vous feriez mieux de faire une requête plus directe, par exemple demander où la colonne de tri est supérieure à la dernière entrée de la précédente page. Il y a des pièges à cette approche, bien sûr, mais la seule chose qu'il sera est plus rapide que LIMIT 50000,1 (tant que vous avez un index, bien sûr)

2

Il dit nulle part que cela ne fonctionnera pas, seulement cette performance Peut souffrir. Comme vous pouvez le voir, l'auteur suggère que vous pouvez vous souvenir du dernier identifiant et faire un where id > last_id limit 20 au lieu de seulement limit 5000, 20.

Prenez garde de grande LIMIT En utilisant index tri est efficace si vous avez besoin premier quelques lignes, même si certains filtrage supplémentaire a lieu donc vous devez numériser plus lignes par index alors demandées par LIMIT. Toutefois, si vous avez affaire à LIMIT requête avec une grande efficacité de décalage souffrira. LIMITE 1000,10 est probablement être beaucoup plus lent que LIMIT 0,10. Il est vrai que la plupart des utilisateurs ne vont pas plus loin que que 10 page dans les résultats, cependant Les moteurs de recherche peuvent très bien faire ainsi. J'ai vu des robots en regardant 200+ page dans mes projets. Aussi pour de nombreux sites Web ne prenant pas soin de ce fournit tâche très facile de lancer une attaque DOS - demande page avec un grand nombre de de quelques connexions et c'est assez. Si vous ne faites rien autre chose assurez-vous de bloquer demandes avec des numéros de page trop volumineux.

Pour certains cas, par exemple, si les résultats sont statiques, il peut être judicieux de résultats de Précalculer de sorte que vous pouvez interroger les pour les postes. Ainsi, au lieu de requête avec LIMIT 1000,10 vous aurez où la position entre 1000 et 1009 qui a même efficacité pour toute position (tant qu'il est indexé)