8800 sujets
Bonjour,
SELECT monchamps FROM matable WHERE id > 'ma valeur'
non?
Sinon, BETWEEN qui revient à faire :
SELECT monchamps FROM matable WHERE id > 'ma valeur 1' AND id < 'ma valeur 2'
SELECT monchamps FROM matable WHERE id BETWEEN 'ma valeur 1' AND 'ma valeur 2'
LIMIT va sélectionner toutes les valeurs de ta table avant de les trier ce qui n'est pas du plus optimisé.
SELECT monchamps FROM matable WHERE id > 'ma valeur'
non?

Sinon, BETWEEN qui revient à faire :
SELECT monchamps FROM matable WHERE id > 'ma valeur 1' AND id < 'ma valeur 2'
SELECT monchamps FROM matable WHERE id BETWEEN 'ma valeur 1' AND 'ma valeur 2'
LIMIT va sélectionner toutes les valeurs de ta table avant de les trier ce qui n'est pas du plus optimisé.
Amha, d'un point de vue strictement tableux, LIMIT est bien plus optimisé (sélection des rows) que BETWEEN ou WHERE (sélection des rows + opération de calcul/comparaison sur les valeurs).
Par contre s'il s'agit de faire un tri et de sortir précisément des enregistrements, oui l'id pourra servir. Avec un bon index, un order by et un limit...
Par contre s'il s'agit de faire un tri et de sortir précisément des enregistrements, oui l'id pourra servir. Avec un bon index, un order by et un limit...
Salut,
juste histoire d'en remettre une couche l'idéal est quand même de s'appuyer sur un index qui va bien. Dans ce cas un between utilisé sur la clef sera bien plus performant qu'un limit (et d'ailleurs quel que soit l'usage il sera plus performant qu'un ... qqchose > autrechose and qqchose < autrechoseplusgrand).
Donc pour ce qui est de ta demande tout dépend de ce que tu veux dire par "à partir d'un certain nombre jusqu'à la totalité de ceux-ci".
Si tu parles en termes d'enregistrements sélectionnés (ne prendre que les résultats après les 20 premiers résultats) il faut utiliser LIMIT.
Si tu parles des résultats à partir d'une certaine valeur d'un champ il faut utiliser WHERE monchamp > 20 (en créant l'index sur ce champ s'il n'existe pas encore).
juste histoire d'en remettre une couche l'idéal est quand même de s'appuyer sur un index qui va bien. Dans ce cas un between utilisé sur la clef sera bien plus performant qu'un limit (et d'ailleurs quel que soit l'usage il sera plus performant qu'un ... qqchose > autrechose and qqchose < autrechoseplusgrand).
Donc pour ce qui est de ta demande tout dépend de ce que tu veux dire par "à partir d'un certain nombre jusqu'à la totalité de ceux-ci".
Si tu parles en termes d'enregistrements sélectionnés (ne prendre que les résultats après les 20 premiers résultats) il faut utiliser LIMIT.
Si tu parles des résultats à partir d'une certaine valeur d'un champ il faut utiliser WHERE monchamp > 20 (en créant l'index sur ce champ s'il n'existe pas encore).
Merci pour vos réponses.
C'est bien cela, mais je ne sais pas comment faire avec LIMIT puisque celui-ci doit avoir un nombre d'enregistrement à afficher à partir d'un certain enregistrement ...
Comment faire pour lui dire qu'il affiche TOUT les enregistrements à partir d'un certain nombre ?
Par exemple : affiche tout les enregistrement à partir du 5ème :
a écrit :
Si tu parles en termes d'enregistrements sélectionnés (ne prendre que les résultats après les 20 premiers résultats) il faut utiliser LIMIT.
C'est bien cela, mais je ne sais pas comment faire avec LIMIT puisque celui-ci doit avoir un nombre d'enregistrement à afficher à partir d'un certain enregistrement ...
Comment faire pour lui dire qu'il affiche TOUT les enregistrements à partir d'un certain nombre ?
Par exemple : affiche tout les enregistrement à partir du 5ème :
LIMIT 5, infini?
Eh bien je dirais qu'il suffit de mettre un nombre démesuré pour le second argument...
du genre ... LIMIT 5, 99999999999
Edit: c'est d'ailleurs ce qui préconisé sur mysql.com...
Modifié par Heyoan (27 Mar 2009 - 00:34)
du genre ... LIMIT 5, 99999999999
Edit: c'est d'ailleurs ce qui préconisé sur mysql.com...
Modifié par Heyoan (27 Mar 2009 - 00:34)
Heyoan a écrit :
Dans ce cas un between utilisé sur la clef sera bien plus performant qu'un limit (et d'ailleurs quel que soit l'usage il sera plus performant qu'un ... qqchose > autrechose and qqchose < autrechoseplusgrand).
"Si expression est supérieure ou égale à min et expression est inférieure ou égale à max, BETWEEN retourne 1, sinon 0. Ceci est équivalent à l'expression (min <= expression AND expression <= max) si tous les arguments sont du même type."
http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html
Limit ne sera optimisé que dans certains cas :
http://dev.mysql.com/doc/refman/5.0/fr/limit-optimization.html
Je ne crois pas que la doc précise d'utiliser limit plutôt qu'une clause where, mais bon.
bzh a écrit :Oui : je parlais en terme d'optimisation (en me référant par exemple à cet article ).
"Si expression est supérieure ou égale à min et expression est inférieure ou égale à max, BETWEEN retourne 1, sinon 0. Ceci est équivalent à l'expression (min <= expression AND expression <= max) si tous les arguments sont du même type."
http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html
bzh a écrit :Merci pour le lien.
Limit ne sera optimisé que dans certains cas :
http://dev.mysql.com/doc/refman/5.0/fr/limit-optimization.html

Modifié par Heyoan (27 Mar 2009 - 11:27)