|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Vincent Inscription : janvier 2011 Messages : 5 ![]() |
Bonjour,
J'ai un problème de dédoublonnage partiel qui correspond exactement à la situation présentée à l'adresse : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L8.2 En l'occurrence j'ai des données provenant d'un compteur électrique qui consistent simplement en un ensemble de valeurs associées à une étiquette. Pour l'instant, ces données arrivent en continu et seules les valeurs qui ont changé sont insérées dans la base associées à la date. L'unique table : Code :
Si j'applique la méthode du lien ci-dessus : Code :
En revanche, si je modifie la sous-requête de sorte à demander la liste des dates avec un "LIMIT 1" pour ne retenir que la plus récente : Code :
aussi simple, pour une base aussi simple et qui ne contient, pour l'instant, qu'environ 60000 lignes. Cette requête me paraît être un standard de l'extraction d'un journal. Alors comment expliquer une telle lenteur ? Comment conviendrait-il de faire cela sous MySQL ? Mon projet, dont ceci me sert à valider les concepts, est nettement plus ambitieux et des délais pareils (même 0,33 s) sont inacceptables (affichages en temps réel...). J'envisage de créer une table avec les dernières valeurs mises à jour par un trigger. Mais ça fait perdre en généralité car on peut vouloir connaître les valeurs pour n'importe quelle date. Merci d'avance à ceux qui voudront bien m'éclairer :-). vincent |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Juste au cas où, qu'est ce que ça donne sans requête corrélée ?
Code :
Je veux dire un index sur les 2 colonnes et pas juste 2 index sur les 2 colonnes. A voir par rapport aux autres requêtes, mais si ce nouvel index est pertinant pour ce besoin, il est possible que l'index sur TIF_ETIQUETTE soit supprimable (pour gagner du temps en insertion), à tester bien sûr. Après 0.33 sec c'est déjà pas mal, et niveau affichage en temps réel je ne pense pas que l'utilisateur fasse une grande différence entre 0.1 et 0.3 sec, quel est ton objectif ? |
||
|
|
10
|
|
|
#3 | |||||||
|
Invité de passage
![]() Vincent Inscription : janvier 2011 Messages : 5 ![]() |
Citation:
deux permettait d'aller vite mais je croyais qu'il fallait faire le lien par le code externe et tu m'apprends donc qu'on peut en quelque sorte créer une table à la volée. Ça permet encore un gain significatif : Code :
Citation:
Enlever l'index sur TIF_ETIQUETTE fait perdre cet avantage. En revanche enlever l'index sur TIF_DATE n'a pas d'effet significatif. Citation:
d'autres données, qu'il faudra trier selon leurs pertinences et gérer des droits d'accès... Ça devienne vraiment très lent. Par rapport aux 1000 s ça fait un gain d'un facteur 15000 ! Merci beaucoup. vincent |
|||||||
|
|
00
|
|
|
#4 | |||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
Citation:
Par contre il est possible que tu soit "victime" d'un phénomeène de cache qu'en est il après redémarrage de la base ? De plus cette différence est peut être très faible sur 60000 lignes mais pourrait être beaucoup plus conséquente avec 5M de lignes, as tu la possibilité de tester en générant une plus grosse table (comme 5M de lignes) ? Citation:
|
|||
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Vincent Inscription : janvier 2011 Messages : 5 ![]() |
Citation:
Citation:
eu de modification entre deux requêtes, le temps est de 0,00002 s. Sinon il est celui que j'ai indiqué. On verra à l'usage, on a déjà bien progressé :-). Mais je me demande bien pourquoi la requête de départ prend tellement de temps. |
||
|
|
00
|
|
|
#6 |
![]() ![]() |
La mauvaise réputation de MySQL en matière, entre autres, de performance avec des requêtes corrélées n'est plus à faire !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com