axilos
-
23 janv. 2013 à 22:28
cs_stay
Messages postés493Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention24 mai 2017
-
25 janv. 2013 à 13:51
Bonjour à tous !
J'ai une petite question d'optimisation à vous soumettre :
J'ai un site avec une base de données et une liste d'objets inclus dedans.
Ces objets sont classé par type identifiés par des id de types.
Ma page d’accueil n'affiche rien mais plusieurs liens dessus permettent de lancer une recherche par type.
Un clique lance donc une requête SQL qui, par un foreach rend les objets, mais dans l'ordre où ils ont été mis dans la BDD !
Je souhaiterais simplement pouvoir régler leur ordre d'apparition.
Pour cela j'ai pensé à créer une clé NUMERIC supplémentaire par objet et ainsi définir l'ordre dans lequel je les veux.
Cependant j'ai peur que cela rende les recherches affreusement lente parce que l'algorithme va puiser dans la BDD puis stocker en local puis faire une boucle de tri croissant sur le résultat de la requête... lourd...
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 23 janv. 2013 à 23:43
Bonjour,
Pourquoi ne pas utiliser la clause SQL ORDER BY ?
v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site
Mais toujours pour les soucis d'optimisations :
Perd-t-on beaucoup en performance entre une requête "classique" et la même requête en ajoutant "ORDER BY #" ?
Aussi je me pose plusieurs questions sur Order by : Comment SQL résous-t-il le conflit lorsque 2 nombres sont identiques ?
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 24 janv. 2013 à 18:47
Bonjour,
Coté performance, entre Order By et un tri "manuel", il y a pas photo, ORDER BY est le plus rapide.
concernant la résolution des conflits, il 2 données sont identiques, il ne fait rien, si tu as besoin de mettre plusieurs critère de tri, tu peux ajouter les champs à la clause :
ORDER BY Champ1 ASC, Champ2 DESC, Champ3 DESC, ...
v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site
cs_stay
Messages postés493Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention24 mai 20174 25 janv. 2013 à 13:51
Salut :), de plus, sur une table au il y a bcp d'enregistrement, utiliser un champ indexer est bien plus performant.
C'est pour cela qu'il est très important de bien sélectionner le moteur de stockage à la création de la table.
Mais pour cela, je te conseil la doc :).
Il y a ceci MyISAM et InnoDB qui te donnera une idée.