Core 666 | ZeBorG a écrit :
Je suis en train de développer un moteur de recherche en PHP/MySQL.
Lors de l'affichage du résultat, j'affiche les 10 (ou 25 ou 50..) premier résultats ainsi que le nombre total de résultats.
Pour faire ceci, je fais dans un premier temps un :
SELECT COUNT(DISTINCT id) FROM ... WHERE ...
Pour connaître le nombre total de résultats puis un :
SELECT toto, tata, titi, ... FROM ... WHERE ... LIMIT 0, 10
Pour récupérer les 10 premier résultats pour les afficher.
Y a-t-il une meilleure manière de procéder que de faire ces 2 requêtes séparées ?
Je me demande s'il ne vaut mieux pas faire un :
SELECT toto, tata, titi, ... FROM ... WHERE XXX (sans limite donc)
De cette manière j'ai également le nombre total de résultat (mysql_num_rows()) mais je manipule un énorme array... En effet, ma base contient plusieurs centaines de milliers d'entrées...
Des idées ?
|
C'est une question intéressante
Je pense pas qu'on puisse donner de réponse générale, ca dépend des scripts, et du facteur le plus limitant sur ta machine (processeur ou RAM). Vu que le LIMIT BY ne fait au final qu'éviter un traitement supplémentaire post-requête par le script, dans la mesure où l'intégralité des lignes qui valident ta clause WHERE est parcourue (que ce soit au niveau des datas ou des index, peu importe), je pense qu'il est dommage de faire une deuxième requête qui va grosso-modo être traitée de la même manière par MySQL. Il vaut peut être mieux récupérer toutes les données. En détruisant l'array dès qu'il n'est plus utilisé ca doit pas consommer grand chose comme mémoire. Tout dépend des scripts après bien sur mais bon.
L'idéal serait évidement qu'il y ait une fonction peu documentée qui permette d'obtenir le nombre de lignes qui auraient été retournées par ta requête si tu n'avais pas mis de LIMIT, en plus du mysql_num_rows, mais on peut toujours rêver
Ce serait à proposer au staff de MySQL AB, car c'est quelque chose qui servirait pas mal. Message édité par Core 666 le 18-03-2003 à 17:20:16
|