|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : novembre 2005 Messages : 122 ![]() |
Bonjour,
Je me retrouve avec ce genre de requête que je dois optimiser: Code :
Pour le moment j'ai l'index suivant: L'index commence par la colonne du IN donc. Mais la requête prend encore trop de temps. Je me demandais si il ne serait mieux de créér un index de ce genre: Donc en mettant la colonne du IN à la fin de l'index. Je suis également à l'écoute d'éventuelles autres idées qui pourrait optimiser cette requête. Je précise que je ne peux pas trop tester car je ne suis pas admin de la base. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
De quel SGBD s'agit-il ?
L'optimisation d'un code SQL dépend beaucoup du SGBD. Plusieurs pistes d'amélioration sont envisageable. Par ailleurs, ne pas avoir les droits admin sur une base n'empêche pas en générale d'utiliser des tables temporaires et de les indexer.
__________________
www.nudge.org Surveillez et optimisez vos applications Java |
|
|
00
|
|
|
#3 |
![]() ![]() |
D'où provient cette liste de plusieurs milliers de nombres ?
L'idéal serait de faire une table, fut-elle temporaire, contenant en une seule colonne tous ces nombres à rechercher, d'indexer cette colonne puis de faire une jointure avec la table temporaire. Si cette solution est impossible, dans la mesure où il y a un index sur c3, peut-être qu'en triant la liste dans l'ordre ascendant accélérerait un peu les choses.
__________________
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
|
|
|
#4 | ||
|
Membre à l'essai
![]() Inscription : novembre 2005 Messages : 122 ![]() |
Citation:
Citation:
Cette fonction construit la liste à partir d'une requête SQL. J'ai bien essayé d'injecter cette requête dans la requête principale en faisant quelque chose de ce genre: Code :
SELECT * FROM T WHERE c1 = 5448 AND c2 = 2 AND c3 IN (SELECT id FROM T2 WHERE ...) Je vais essayer de trier au préalable cette liste, ça me parait pas bête comme idée. Je vous tiens au courant lundi. |
||
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Tu as besoin d'apprendre le SQL, et notamment les jointures !
Code :
__________________
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
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 629 ![]() |
Sinon, pour la question initial le 2eme index devrait mieux gérer la situation.
Simplement car tu aurai une sélectivité beaucoup plus réduite pour traiter ta clause IN. Après reste à voir ton select, car avec un "select *" DB2 pourra partir sur un scanage de table direct s'il évalue que tu vas ramener plus de 15-20% des enregistrement totale de ta table. |
|
|
00
|
|
|
#7 | ||||
|
Membre à l'essai
![]() Inscription : novembre 2005 Messages : 122 ![]() |
Citation:
Il va devoir passer en revue tous les c3 qui sont dans la table/liste. Citation:
Sinon il y a peu de chance que ca me renvoie plus de 1% de la table. Mais je ne vois pas trop pour quelle raison il se mettrait à faire un scannage complet. |
||||
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
Ne pas essayer de faire faire à un langage de programmation ce qui est le boulot du SGBD ! Et bien sûr, pour que la requête soit exécutée rapidement, il faut que les tables soient correctement indexées.
__________________
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