|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2007 Messages : 5 ![]() |
Bonjour,
Pouvez vous SVP,me dire ce qui cloche dans cette requete? Code :
colonne2 --->type DATETIME TABLE contient environ 1.5Millions de ligne Merci de votre aide. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 056 ![]() |
bonjour,
j'imagine qu'elle tourne longtemps ? si oui, êtes-vous allé jusqu'au bout ? bref, déjà les NOT IN impliquent un scan complet de la table. Est-ce que le "and a.colonne5 not in ('5','8')" est discriminant ou pas ? Est-ce que le "and a.colonne4=0 est discriminant ou pas ? Est-ce que le "and a.colonne3 >= 1 est discriminant ou pas ? Est-ce que le colonne1 est bien indexé ? il y a plusieurs pistes à regarder, la réécriture peut également être une solution. Y-a-t-il des index sur TABLE ?
__________________
Emmanuel T. |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : août 2007 Messages : 134 ![]() |
Non. a.colonne5 not in ('5','8') est interprété comme deux sargs, a.colonne5 <> 5 et a.colonne5 <> 8. L'optimiseur peut donc décider faire un non-matching index scan sur un index couvrant ayant pour première colonne colonne5, si l'un de ces sarg est le plus disciminant de tous. Sinon il peut bien sur utiliser un index sur une colonne d'un autre sarg.
Pour le reste, je suis d'accord, il nous faut la liste des indexes, le plan d'exécution et les stats sur la table pour pouvoir vraiment t'aider, et avoir un index sur les colonnes présentes dans les sargs les plus discriminants est un bon départ. Réécrire en passant par une ou plusieurs tables temporaires pour aider l'optimiseur peut aussi aider. |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 056 ![]() |
Citation:
Dans le cas d'un nonmatching scan sur une grosse table, c'est en général peu performant, bien qu'un peu plus efficace qu'un scan de table.
__________________
Emmanuel T. |
|
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : juillet 2007 Messages : 5 ![]() |
Bonjour,
Désolé mais j'ai été absent un petit moment.Alors pour répondre à vos questions: 1- la requete est effectivement tres tres longue,je n'ai pas eu la patience de la laisser finir.il existe en effet un index non clusterisé sur TABLE --> idx_table_02 (colonne1,colonne2) qui est pertinent pour la requete. j'ai meme essayé de forcer le plan d'xécution à prendre ne compte l'index dans la 1ere étape mais ,cela ne change rien...requete toujours aussi longue. ci dessous le plan d'exécution: Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 293 ![]() |
Ben visiblement cela fait des table scan, donc n'utilise pas l'index en question ...
si tu as créé l'index as tu fais un update stat de ta table?? ou alors l'index est pas positionné sur la bonne col. Je vois que cela, mais je suis pas un dev alors ... Bon courage A+ |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : juillet 2007 Messages : 5 ![]() |
oui mais un scan table sur 1,5 million de lignes,c'est pas dramatique, non?
l'index idx_table_02 sur colonne1 existe déjà depuis pas mal de temps, donc les update stats, on a en fait des paquets. bon ben, si qq'un voit une solution ou des ptits tuyaux pour re-ecrire la requete, je suis preneur... Merci. |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 293 ![]() |
Ben moi un table scan sur 1,5 Million de lignes cela me semble beaucoup ... surtout que cela dépend de ta mémoire allouer à ASE plus les acces disk, as tu des baies ? du RAID ?? enfin il me semble qu'un index mieux positionné solutionnerai pas mal de choses !!! Fait des dump de stats avec optdiag et test la création d'autres indexes, update stat et en cas de gain null refais ton index d'origine, et reloa tes stats du début.
Vila pour moi. A+ |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 124 ![]() |
la request est elle dépendante de la base sur le serveur?
|
|
|
00
|
|
|
#10 |
![]() ![]() |
En plus, des caches de 4K pour index et data, c'est pas des plus optimum à ma connaissance... j'ai plutôt l'habitude de laisser ça pour du log...
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql Administrateur SAP Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums ! |
|
|
00
|
|
|
#11 | |||
![]() ![]() |
Citation:
Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
|||
|
|
00
|
|
|
#12 | |||
|
Membre actif
![]() Inscription : août 2007 Messages : 134 ![]() |
Citation:
Sinon, que revoient les requêtes suivantes : Code :
Sinon, n'hésite pas à découper cette requête en plusieurs, et à utiliser des tables tempo, pour aider l'optimiseur. |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com