|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 9 ![]() |
Bonjour,
Je ne suis pas un expert en SQL, et j'aimerai optimiser une requete car celle ci s'execute trop lentement et je viens vers vous car je pense qu'il est possible de mieux faire: Code :
Precision: il ne peut y avoir 2 enregistrement de value pour un tag à un time donnée. La requete s'execute particulièrement lentement si aucun enregistrement n'a été fait avant la date donnée. Merci,!! JB Tout coup de pouce et le bienvenu. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
bonjour,
quel est votre sgbd + définition de la table + index déjà présent ? |
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Bonjour,
Je ne vois pas l'utilité de passer par une sous-requête... Code SQL :
Cette requête ne renvoie pas la même chose ? Tatayo. |
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
Bonsoir,
Pas forcément: 1) Le GROUP BY dans cette requête provoque que chaque value distinctes sera renvoyé même si aucun time associée n'est égale au max considéré. Alors que dans la requête de l'auteur du post, seules les value étant associées à un time = max(...) sont retournées. 2) De plus, une seule ligne sera retournée par value ce qui n'est pas forcément le cas de la requête de l'auteur.
__________________
www.nudge.org Surveillez et optimisez vos applications Java |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 9 ![]() |
Citation:
L'index j'en ai aucune idée La table contient des enregistrements pour differents tag: Un enregistrement= "Tag","Valeur","Date" Citation:
sauf concernant 2) Ma requête ne renvoie q'une ligne car il ne peut y avoir plusieurs enregistrement à un time donné pour un tag donné. |
||
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour
pour la rapidite, il faut penser a creer un index sur la date, mais descendant a+ |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Dans la série ceinture, bretelles et épingle à nourrisse, s'assurer que l'attribut Tag est lui aussi indexé, à moins bien sûr qu'un EXPLAIN PLAN (ou équivalent) montre que cela est inutile.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
SQL serveur : regardez si le plan d'exécution de cette requête est mieux ou non :
Code :
Et si ca n'est toujours pas bon, vous pouvez créer un index comme ceci : tag, time desc, value |
||
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Céez cet index :
Code :
CREATE INDEX X_EDB_TAG_TIM ON e_db (tag, time) INCLUDE (value) WITH (FILLFACTOR = 80) Lisez l'article que j'ai écrit sur l'indexation : http://sqlpro.developpez.com/cours/quoi-indexer/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 9 ![]() |
Re Bonjour,
Concernant la proposition de punkoff, c'est beaucoup plus long. Concernant l'index je crois qu'il existe déjà sur time DESC. La requete s'execute particulièrement lentement si aucun enregistrement n'a été fait avant la date donnée. Donc l'indexation n'apportera rien dans ce cas. Donc merci pour votre aide, Je crois que je peux pas faire beaucoup mieux que ce que j'ai. De toute façon c'est déjà utilisable comme cela. Salutations, g |
|
|
00
|
|
|
#11 | |||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Un index sur time n'est probablement pas sufffisant, et donc peut etre pas utilisé Voyez l'index proposé par SQLPro : Citation:
D'ailleurs, je dirai même qu'il devrait être unique Code sql :
Puisque vous dites : Citation:
Citation:
|
|||||
|
|
00
|
|
|
#12 |
![]() ![]() |
Par contre comme il cherche un time inférieur à une date/heure donnée, je ne vois pas l'intérêt de classer les time en DESC ! Le SGBD devra parcourir tout l'index avant de s'apercevoir qu'il n'y a pas de ligne répondant à la demande. Par contre avec un index ASC, si la première date est par exemple '2010-07-24 23:00:00', pas besoin d'aller plus loin !
Au fait, le format de date standard en SQL est celui que j'ai donné, pas celui de la requête ! ![]() Et il ne faut pas nommer une colonne "time" qui est un mot réservé du langage SQL !
__________________
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
|
|
|
#13 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 9 ![]() |
si il faut que ce soit en time DESC, pour trouver rapidement le max(eventtime) quand il existe (ce qui est le plus courant)
Bon sinon, merci pour les conseils, je vais essayer de voir avec l'admin de la base s'il peut me créer cet index, car, moi je ne peux pas. |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 9 ![]() |
Merci, l'indexation a bien améliorée le traitement (100x plus rapide montre en main)
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com