PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Optimisation Requete
Optimisation Requete
Iniciado por a.charrier, 09,mar. 2020 23:42 - 3 respuestas
Publicado el 09,marzo 2020 - 23:42
Bonjour,

j'ai une requête assez simple , je dois récupérer les enregistrements d'une table dont un paramètre = à 1 (on va nommer le champ "Param") et trier par ordre croissant de "Désignation".
Je trouve qu'il y a quelques lenteurs
1.Actuellement je n'ai pas mis de clé dans ma table sur "param", le fait de mettre une clé avec doublon sur ce champ optimiserai t'il le temps d’exécution de la requête ?
2.lorsque je lance l'optimisation de la requete il m'indique de créer une clé composée, est ce que cela ferait gagner bcp de temps d'execution ?

je préférerai éventuellement la 1ère solution car cela évite de surcharger ma table avec encore une clé composée sauf si vraiment cela fait gagner bcp de temps.

Merci,
Anthony
Publicado el 10,marzo 2020 - 12:27
>>un paramètre = à 1 (on va nommer le champ "Param") et trier par ordre croissant de "Désignation".

Donc, pour que la requete soit LE PLUS RAPIDE POSSIBLE, il faut une clé composée de param+désignation

1.Actuellement je n'ai pas mis de clé dans ma table sur "param", le fait de mettre une clé avec doublon sur ce champ optimiserai t'il le temps d’exécution de la requête ?


Bien sur... ca lui permettrait de ne lire QUE Les enregs donts param=1 au lieu de TOUS les enregs du fichier (plus le fichier grandit, plus c'est long)

>>2.lorsque je lance l'optimisation de la requete il m'indique de créer une clé composée, est ce que cela ferait gagner bcp de temps d'execution ?

BEAUCOUP ? Ca dépend de la logique de ton appli (cad de toi)... la clé composée, en plus de permettre ce qui est décrit pour ta quesiton 1, permttrait au moteur sql d'accédr aux enregs directement dans le bon ordre, don sans avoir besoin de tout stocker en mémoire, puis TRIER en mémoire, avant de te renvoyer les données...

Doinc, si ta requete ne va LOGIQUEMENT renvoyer que 5 ou 10 ou 20 enregs à chaque fois, le temps de tri en mémoire sera négligeable, et le gain de temps d'une clé composée par rapport à une clé simple sur param sera faible... Par contre, si dans ton appli il est possible que cette requete retourne des milliers de lignes, le gain de temps sera conséquent.

Mais ce n'est pas la seule chose à considérer... Si cette requête est destinée à être lancée très souvent, par des milliers d'utilisateurs en simultané (comme sur un site web, par exemple), alors la petite optimisation de la clé composée va permettre de soulager FORTEMENT le processeur du serveur qui n'aura pas à faire des milliers de tri simultanément...
Miembro registrado
4.362 mensajes
Publicado el 10,marzo 2020 - 12:32
Bonjour,
Je dirais le 2 mon Général.
Le fait d'indexer (clé avec doublon) permet d’accélérer la recherche sur la colonne indexée. Donc si ta condition ne porte que sur cette colonne, ça suffit.
Par contre en cas de condition sur 2 colonnes, le fait de créer une clé composée sur ces deux colonne permet de faire une recherche sur la paire et non une recherche sur les deux colonnes indexées.

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 31,marzo 2020 - 20:26
merci à vous pour vos réponses,

Anthony