OVH Cloud OVH Cloud

requete et index

7 réponses
Avatar
Houdini
Bonjour,
J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque dansla
requete la colonne concernee n'est pas utilisee directement mais avec un
convert.
exemple de requete :
delete table1 from table1 a, table2 b where convert(int, a.col1)=b.col2
la table table1 a un index sur la colonne col1
est-ce que l'optimiseur va utiliser l'index sur cette colonne col1 ou
va-t-il faire un scan de la table ?
Par avance, merci ...

Houdini

7 réponses

Avatar
bruno reiter [MVP]
scan table

br

"Houdini" wrote in message
news:
Bonjour,
J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque dansla
requete la colonne concernee n'est pas utilisee directement mais avec un
convert.
exemple de requete :
delete table1 from table1 a, table2 b where convert(int, a.col1)=b.col2
la table table1 a un index sur la colonne col1
est-ce que l'optimiseur va utiliser l'index sur cette colonne col1 ou
va-t-il faire un scan de la table ?
Par avance, merci ...

Houdini


Avatar
Houdini
Dès qu'une operation de transformation (convert, substring, ...) est faite
sur une colonne indexee, l'index ne peut pas etre utilise ... c'est bien ca ?
Pour utiliser l'index, il faut vraiment que la clause utilise la colonne
telle qu'elle est ... sans modification ... c'est ca ?
Merci Bruno

Houdini

*****************************

"bruno reiter [MVP]" a écrit :

scan table

br

"Houdini" wrote in message
news:
> Bonjour,
> J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque dansla
> requete la colonne concernee n'est pas utilisee directement mais avec un
> convert.
> exemple de requete :
> delete table1 from table1 a, table2 b where convert(int, a.col1)=b.col2
> la table table1 a un index sur la colonne col1
> est-ce que l'optimiseur va utiliser l'index sur cette colonne col1 ou
> va-t-il faire un scan de la table ?
> Par avance, merci ...
>
> Houdini





Avatar
bruno reiter [MVP]
il faut utiliser tel que, sinon il doit scanner l'index entier en faisant le
convert (il ne peut pas pointer en direct), donc il ne fait pas, il lit
directement la table.

br

"Houdini" wrote in message
news:
Dès qu'une operation de transformation (convert, substring, ...) est faite
sur une colonne indexee, l'index ne peut pas etre utilise ... c'est bien


ca ?
Pour utiliser l'index, il faut vraiment que la clause utilise la colonne
telle qu'elle est ... sans modification ... c'est ca ?
Merci Bruno

Houdini

*****************************

"bruno reiter [MVP]" a écrit :

> scan table
>
> br
>
> "Houdini" wrote in message
> news:
> > Bonjour,
> > J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque


dansla
> > requete la colonne concernee n'est pas utilisee directement mais avec


un
> > convert.
> > exemple de requete :
> > delete table1 from table1 a, table2 b where convert(int,


a.col1)=b.col2
> > la table table1 a un index sur la colonne col1
> > est-ce que l'optimiseur va utiliser l'index sur cette colonne col1 ou
> > va-t-il faire un scan de la table ?
> > Par avance, merci ...
> >
> > Houdini
>
>
>


Avatar
hell
Bonjour,

Dans ce type de cas, est-ce que l'on ne pourrait pas céer une vue de la
table avec le convert et creer un index pour cette vue et utiliser la vue
dans les requetes?
Ca resoudrait les problèmes de performances ou ce serait trop lourd?

Eric.

"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news:
il faut utiliser tel que, sinon il doit scanner l'index entier en faisant


le
convert (il ne peut pas pointer en direct), donc il ne fait pas, il lit
directement la table.

br

"Houdini" wrote in message
news:
> Dès qu'une operation de transformation (convert, substring, ...) est


faite
> sur une colonne indexee, l'index ne peut pas etre utilise ... c'est bien
ca ?
> Pour utiliser l'index, il faut vraiment que la clause utilise la colonne
> telle qu'elle est ... sans modification ... c'est ca ?
> Merci Bruno
>
> Houdini
>
> *****************************
>
> "bruno reiter [MVP]" a écrit :
>
> > scan table
> >
> > br
> >
> > "Houdini" wrote in message
> > news:
> > > Bonjour,
> > > J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque
dansla
> > > requete la colonne concernee n'est pas utilisee directement mais


avec
un
> > > convert.
> > > exemple de requete :
> > > delete table1 from table1 a, table2 b where convert(int,
a.col1)=b.col2
> > > la table table1 a un index sur la colonne col1
> > > est-ce que l'optimiseur va utiliser l'index sur cette colonne col1


ou
> > > va-t-il faire un scan de la table ?
> > > Par avance, merci ...
> > >
> > > Houdini
> >
> >
> >




Avatar
Fred BROUARD
bonjour,

hell a écrit:
Bonjour,

Dans ce type de cas, est-ce que l'on ne pourrait pas céer une vue de la
table avec le convert et creer un index pour cette vue et utiliser la vue
dans les requetes?
Ca resoudrait les problèmes de performances ou ce serait trop lourd?



Lourd car nécessite le calcul de l'index à chaque maj.

Mais le problème résulte visiblement d'une modélisation mal faite ! Pourquoi
utiliser un littéral pour un nombre ?

A +



Eric.

"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news:

il faut utiliser tel que, sinon il doit scanner l'index entier en faisant



le

convert (il ne peut pas pointer en direct), donc il ne fait pas, il lit
directement la table.

br

"Houdini" wrote in message
news:

Dès qu'une operation de transformation (convert, substring, ...) est





faite

sur une colonne indexee, l'index ne peut pas etre utilise ... c'est bien



ca ?

Pour utiliser l'index, il faut vraiment que la clause utilise la colonne
telle qu'elle est ... sans modification ... c'est ca ?
Merci Bruno

Houdini

*****************************

"bruno reiter [MVP]" a écrit :


scan table

br

"Houdini" wrote in message
news:

Bonjour,
J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque







dansla

requete la colonne concernee n'est pas utilisee directement mais









avec

un

convert.
exemple de requete :
delete table1 from table1 a, table2 b where convert(int,







a.col1)=b.col2

la table table1 a un index sur la colonne col1
est-ce que l'optimiseur va utiliser l'index sur cette colonne col1









ou

va-t-il faire un scan de la table ?
Par avance, merci ...

Houdini

















--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
bruno reiter [MVP]
une colonne calculée indexée ferait l'affaire

br

"hell" wrote in message
news:
Bonjour,

Dans ce type de cas, est-ce que l'on ne pourrait pas céer une vue de


la
table avec le convert et creer un index pour cette vue et utiliser la vue
dans les requetes?
Ca resoudrait les problèmes de performances ou ce serait trop lourd?

Eric.

"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news:
> il faut utiliser tel que, sinon il doit scanner l'index entier en


faisant
le
> convert (il ne peut pas pointer en direct), donc il ne fait pas, il lit
> directement la table.
>
> br
>
> "Houdini" wrote in message
> news:
> > Dès qu'une operation de transformation (convert, substring, ...) est
faite
> > sur une colonne indexee, l'index ne peut pas etre utilise ... c'est


bien
> ca ?
> > Pour utiliser l'index, il faut vraiment que la clause utilise la


colonne
> > telle qu'elle est ... sans modification ... c'est ca ?
> > Merci Bruno
> >
> > Houdini
> >
> > *****************************
> >
> > "bruno reiter [MVP]" a écrit :
> >
> > > scan table
> > >
> > > br
> > >
> > > "Houdini" wrote in message
> > > news:
> > > > Bonjour,
> > > > J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque
> dansla
> > > > requete la colonne concernee n'est pas utilisee directement mais
avec
> un
> > > > convert.
> > > > exemple de requete :
> > > > delete table1 from table1 a, table2 b where convert(int,
> a.col1)=b.col2
> > > > la table table1 a un index sur la colonne col1
> > > > est-ce que l'optimiseur va utiliser l'index sur cette colonne col1
ou
> > > > va-t-il faire un scan de la table ?
> > > > Par avance, merci ...
> > > >
> > > > Houdini
> > >
> > >
> > >
>
>




Avatar
Houdini
Merci pour toutes vos réponses.
A bientot
Houdini

"bruno reiter [MVP]" a écrit :

une colonne calculée indexée ferait l'affaire

br

"hell" wrote in message
news:
> Bonjour,
>
> Dans ce type de cas, est-ce que l'on ne pourrait pas céer une vue de
la
> table avec le convert et creer un index pour cette vue et utiliser la vue
> dans les requetes?
> Ca resoudrait les problèmes de performances ou ce serait trop lourd?
>
> Eric.
>
> "bruno reiter [MVP]" <remove.this! a écrit dans le
message
> de news:
> > il faut utiliser tel que, sinon il doit scanner l'index entier en
faisant
> le
> > convert (il ne peut pas pointer en direct), donc il ne fait pas, il lit
> > directement la table.
> >
> > br
> >
> > "Houdini" wrote in message
> > news:
> > > Dès qu'une operation de transformation (convert, substring, ...) est
> faite
> > > sur une colonne indexee, l'index ne peut pas etre utilise ... c'est
bien
> > ca ?
> > > Pour utiliser l'index, il faut vraiment que la clause utilise la
colonne
> > > telle qu'elle est ... sans modification ... c'est ca ?
> > > Merci Bruno
> > >
> > > Houdini
> > >
> > > *****************************
> > >
> > > "bruno reiter [MVP]" a écrit :
> > >
> > > > scan table
> > > >
> > > > br
> > > >
> > > > "Houdini" wrote in message
> > > > news:
> > > > > Bonjour,
> > > > > J'aimerais savoir si l'optimiseur sql va utiliser l'index lorsque
> > dansla
> > > > > requete la colonne concernee n'est pas utilisee directement mais
> avec
> > un
> > > > > convert.
> > > > > exemple de requete :
> > > > > delete table1 from table1 a, table2 b where convert(int,
> > a.col1)=b.col2
> > > > > la table table1 a un index sur la colonne col1
> > > > > est-ce que l'optimiseur va utiliser l'index sur cette colonne col1
> ou
> > > > > va-t-il faire un scan de la table ?
> > > > > Par avance, merci ...
> > > > >
> > > > > Houdini
> > > >
> > > >
> > > >
> >
> >
>
>