|
| Optimisation de SELECT DISTINCT très long... |
| Iniciado por lomiondraloc, 29,jul. 2020 17:46 - 5 respuestas |
| |
| | | |
|
| |
Miembro registrado 48 mensajes |
|
| Publicado el 29,julio 2020 - 17:46 |
Bonjour,
Dans un projet WinDev que je dois modifier et d'optimiser, j'ai un fichier HFSQL local (pas C/S) d'environ 9 Go et contenant 5.5 millions d'enregistrements. Ce fichier a une rubrique numérique appelée ID, définie en clé avec doublons. J'ai une requête sur ce fichier, destinée à obtenir la liste de ces IDs (une seule fois chacun).
La requête a été faite à l'éditeur, mais le code SQL correspondant est on ne peut plus simple : SELECT DISTINCT Fichier.ID FROM Fichier
Cette requête met environ 1 minute à s'exécuter, ce qui est beaucoup trop long pour son usage. Y a-t-il une solution pour l'accélérer ou est-ce juste normal par rapport au nombre d'enregistrements ? Qu'en pensez-vous ?
Merci d'avance, Lomion |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.002 mensajes |
|
| Publicado el 29,julio 2020 - 18:28 |
Bonjour,
J'ai une table de 8 485 457 lignes, avec un ID Clé avec doublon, 2,63Go
Quand je fais le meme requête que toi, il faut environ 28 secondes pour afficher 121502 lignes,
En HF local, comme en C/S d'ailleurs, il faut pouvoir stocker l'intégralité de ta table en RAM, si c'est pas possible ca rallonge le temps d'execution, car il va stocker sur le HDD.
Maintenant a savoir, a quel moment veut-tu avoir cette requête, est-ce qu'il faut que tu l'exécute en permanence, ou 1 fois par jour suffit ?
A voir avec une vue HFSQL..
Jordan |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,julio 2020 - 18:34 |
Bonjour,
essaies la commande GroupBy, je ne sais pas si cela sera plus rapide mais . . . essaies.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 30,julio 2020 - 07:59 |
Je trouve ça extrêmement long. Pour comparaison, sur une base PostgreSQL non optimisée, un distinct sur 9 millions de lignes renvois le résultat en 4 s.
Problème d'optimisation de HFSQL ou de la table (manque d'une clé par exemple) ??
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 48 mensajes |
|
| Publicado el 30,julio 2020 - 09:25 |
Merci pour vos réponses 
@Jordan : Ton résultat est deux fois plus rapide, mais ça reste quand même assez long... Et oui, j'ai pensé à une vue SQL, il faut que je teste ça. Il se trouve que ce fichier n'est que très rarement modifié.
@Philippe : c'est un fichier local (pas de C/S). et il y a une clé avec doublons sur l'ID (la rubrique sur laquelle je fais le DISTINCT. Je ne vois pas trop quoi faire d'autre... Si tu as une idée, je suis preneur 
Lomion |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 48 mensajes |
|
| Publicado el 30,julio 2020 - 11:18 |
@Dominique : bonne idée. Je viens de faire le test avec cette requête : SELECT ID FROM Fichier GROUP BY ID
Malheureusement, ça donne exactement le même temps de calcul... |
| |
| |
| | | |
|
| | | | |
| | |
|