[PHP MYSQL] Trier une table dans la base

Trier une table dans la base [PHP MYSQL] - PHP - Programmation

Marsh Posté le 14-12-2002 à 13:13:51    

J'ai fait un petit moteur de news et je lui demande tjs de sortir les dernière news en fonction de la date avec une requete du genre: SELECT * from news ORDER BY Date limits 0,10.
Bref je suppose qu'il parocour ma table fait un tri et prend les 10 premiers. N'y aurait il pas moyen de classer tout celà déjà dans la base à chaque insertion pour pouvoir faire par après  
SELECT * from news limits 0,10. ? Ou y a t il une autre façon d'optimiser parceque je me dis qu'avec plus d'enregistrements ça va devenir drôle :(


---------------
Belgian connection
Reply

Marsh Posté le 14-12-2002 à 13:13:51   

Reply

Marsh Posté le 14-12-2002 à 13:36:26    

belgique a écrit :

J'ai fait un petit moteur de news et je lui demande tjs de sortir les dernière news en fonction de la date avec une requete du genre: SELECT * from news ORDER BY Date limits 0,10.
Bref je suppose qu'il parocour ma table fait un tri et prend les 10 premiers. N'y aurait il pas moyen de classer tout celà déjà dans la base à chaque insertion pour pouvoir faire par après  
SELECT * from news limits 0,10. ? Ou y a t il une autre façon d'optimiser parceque je me dis qu'avec plus d'enregistrements ça va devenir drôle :(


 
non
 
a part mettre un index sur les champs concernés par les tris

Reply

Marsh Posté le 14-12-2002 à 13:42:40    

Enfin, un index sur les dates aidera-t-il au tri?  
J'ai aussi vu une option dans phpmyamdin qui permettait de trier les enregistrements mais comme je connais pas la commande :/


---------------
Belgian connection
Reply

Marsh Posté le 14-12-2002 à 17:47:05    

Exécute la commande dans PHPMyAdmin et tu verras la requête (c'est du ALTER TABLE je sais plus quoi). En fait ça réorganise ta table en fonction du champ que tu indiques. Comme ça si tu fais un LIMIT sans ORDER BY ça marche comme tu veux mais je sais pas si c'est plus rapide.
 
Sinon je ne pense pas que tu ais de pb du moment que tu dépasses pas 10000 news. J'avais fais un test avec une base de 10000 articles (avec un champ date). Dans ma requête j'avais un ORDER BY date DESC LIMIT 0,3 ... Donc l'index que j'avais mis sur date n'était pas utilisé (car order desc et pas asc) comme j'avais pas MySQL 4. Mais la requête était quand même transparente pour l'utilisateur.
 
Donc je pense que tu n'as pas de souci à te faire.
 
Le mieux est d'aller voir le chap Comment MySQL optimise LIMIT dans la doc.

Reply

Marsh Posté le 14-12-2002 à 17:50:59    

Citation :

If you use LIMIT # with ORDER BY, MySQL will end the sorting as soon as it has found the first # lines instead of sorting the whole table.


Bon le pb c'est que ça n'utilise pas l'index quand c'est DESC. Et que je ne vois pas comment MySQL peut faire pour ne pas scanner tte la table s'il n'y a pas d'index (puisque si la dernière valeur a la date la plus récente il faut la mettre en premier), car je pense que c'est un algorithme de tri par insertion (??? en fait j'en sais rien ???).

Reply

Marsh Posté le 14-12-2002 à 21:52:46    

Pour l'index et desc je m'en doutais bien, maintenant il est pratiquement sur que sans order ça doit être bien plus rapide. Phpadmin ne m'affiche pas la requête pour ce type d'actions :/


---------------
Belgian connection
Reply

Marsh Posté le 14-12-2002 à 21:55:44    

Merci pour alter au fait, je vais aller voir de ce coté là ;)


---------------
Belgian connection
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed