Indexes de vues non utilisés !

Le
Jean-Nicolas BERGER
Bonjour,
j'ai un souci sous SQL 2005 Enterprise SP2.
J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis j'ai
créé un Index Unique Clustered sur cette vue.
Tout s'est jusque là bien passé.
le problème, c'est que lorsque je fais un select top 10 * from ma_vue, le
plan d'exécution montre que le moteur de données refait les jointures avec
les tables sous-jacentes, au lieu d'utiliser l'index créé.
Quelqu'un aurait-il une piste?
Merci.
JN
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe TROTIN [MS]
Le #11869701
Bonjour,

Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le cache
(DBCC FREEPROCACHE), ...

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" dans le message de groupe de discussion :

Bonjour,
j'ai un souci sous SQL 2005 Enterprise SP2.
J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis j'ai
créé un Index Unique Clustered sur cette vue.
Tout s'est jusque là bien passé.
le problème, c'est que lorsque je fais un select top 10 * from ma_vue, le
plan d'exécution montre que le moteur de données refait les jointures avec
les tables sous-jacentes, au lieu d'utiliser l'index créé.
Quelqu'un aurait-il une piste?
Merci.
JN


Jean-Nicolas BERGER
Le #11869671
Bonjour,
Le comportement est inchangé lorsque je met à jour les statistiques ou
encore lorsque je vide le cache;
Pour info, si je lance le SELECT avec WITH (NOEXPAND), il y a bien
utilisation de l'index.
Et en lancant dans un même lot un SELECT avec WITH (NOEXPAND) et un SELECT
avec OPTION (EXPAND VIEWS), j'obtiens une répartition du temps d'exécution de
la forme 5% / 95%.
Et sans option, l'optimiseur choisi la version la plus lente... :-(
Merci d'avance pour votre aide.
Cordialement.
JN BERGER

"Philippe TROTIN [MS]" wrote:

Bonjour,

Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le cache
(DBCC FREEPROCACHE), ...

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" dans le message de groupe de discussion :

> Bonjour,
> j'ai un souci sous SQL 2005 Enterprise SP2.
> J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis j'ai
> créé un Index Unique Clustered sur cette vue.
> Tout s'est jusque là bien passé.
> le problème, c'est que lorsque je fais un select top 10 * from ma_vue, le
> plan d'exécution montre que le moteur de données refait les jointures avec
> les tables sous-jacentes, au lieu d'utiliser l'index créé.
> Quelqu'un aurait-il une piste?
> Merci.
> JN




Philippe TROTIN [MS]
Le #11869661
Bonjour,

Et si vous faites un SELECT TOP 10 * FROM ma_vue ORDER BY Mon_Index ?

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" dans le message de groupe de discussion :

Bonjour,
Le comportement est inchangé lorsque je met à jour les statistiques ou
encore lorsque je vide le cache;
Pour info, si je lance le SELECT avec WITH (NOEXPAND), il y a bien
utilisation de l'index.
Et en lancant dans un même lot un SELECT avec WITH (NOEXPAND) et un SELECT
avec OPTION (EXPAND VIEWS), j'obtiens une répartition du temps d'exécution
de
la forme 5% / 95%.
Et sans option, l'optimiseur choisi la version la plus lente... :-(
Merci d'avance pour votre aide.
Cordialement.
JN BERGER

"Philippe TROTIN [MS]" wrote:

Bonjour,

Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le
cache
(DBCC FREEPROCACHE), ...

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" écrit
dans le message de groupe de discussion :

> Bonjour,
> j'ai un souci sous SQL 2005 Enterprise SP2.
> J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis
> j'ai
> créé un Index Unique Clustered sur cette vue.
> Tout s'est jusque là bien passé.
> le problème, c'est que lorsque je fais un select top 10 * from ma_vue,
> le
> plan d'exécution montre que le moteur de données refait les jointures
> avec
> les tables sous-jacentes, au lieu d'utiliser l'index créé.
> Quelqu'un aurait-il une piste?
> Merci.
> JN






Jean-Nicolas BERGER
Le #11869631
Je ne peux bien évidemment pas faire un 'ORDER BY Mon_Index', mais un 'ORDER
BY LesChampsDeMonIndex' n'arrange pas le problème, le plan d'exécution montre
toujours un passage par les tables sous-jacentes.

Mytère, quand tu nous tiens...
JN.

"Philippe TROTIN [MS]" wrote:

Bonjour,

Et si vous faites un SELECT TOP 10 * FROM ma_vue ORDER BY Mon_Index ?

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" dans le message de groupe de discussion :

> Bonjour,
> Le comportement est inchangé lorsque je met à jour les statistiques ou
> encore lorsque je vide le cache;
> Pour info, si je lance le SELECT avec WITH (NOEXPAND), il y a bien
> utilisation de l'index.
> Et en lancant dans un même lot un SELECT avec WITH (NOEXPAND) et un SELECT
> avec OPTION (EXPAND VIEWS), j'obtiens une répartition du temps d'exécution
> de
> la forme 5% / 95%.
> Et sans option, l'optimiseur choisi la version la plus lente... :-(
> Merci d'avance pour votre aide.
> Cordialement.
> JN BERGER
>
> "Philippe TROTIN [MS]" wrote:
>
>> Bonjour,
>>
>> Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le
>> cache
>> (DBCC FREEPROCACHE), ...
>>
>> Cordialement
>> _______________________________
>>
>> Philippe TROTIN
>> Microsoft Services France
>> _______________________________
>>
>> "Jean-Nicolas BERGER" >> écrit
>> dans le message de groupe de discussion :
>>
>> > Bonjour,
>> > j'ai un souci sous SQL 2005 Enterprise SP2.
>> > J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis
>> > j'ai
>> > créé un Index Unique Clustered sur cette vue.
>> > Tout s'est jusque là bien passé.
>> > le problème, c'est que lorsque je fais un select top 10 * from ma_vue,
>> > le
>> > plan d'exécution montre que le moteur de données refait les jointures
>> > avec
>> > les tables sous-jacentes, au lieu d'utiliser l'index créé.
>> > Quelqu'un aurait-il une piste?
>> > Merci.
>> > JN
>>
>>



Med Bouchenafa
Le #11869621
En fait le comportement est celui d'une edition Standard alors qu'il s'agit
d'une edition Enterprise
Je lancerais a toutes fins utiles
SELECT SERVERPROPERTY ('Edition')

Med Bouchenafa


"Jean-Nicolas BERGER" message news:
Je ne peux bien évidemment pas faire un 'ORDER BY Mon_Index', mais un
'ORDER
BY LesChampsDeMonIndex' n'arrange pas le problème, le plan d'exécution
montre
toujours un passage par les tables sous-jacentes.

Mytère, quand tu nous tiens...
JN.

"Philippe TROTIN [MS]" wrote:

Bonjour,

Et si vous faites un SELECT TOP 10 * FROM ma_vue ORDER BY Mon_Index ?

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" écrit
dans le message de groupe de discussion :

> Bonjour,
> Le comportement est inchangé lorsque je met à jour les statistiques ou
> encore lorsque je vide le cache;
> Pour info, si je lance le SELECT avec WITH (NOEXPAND), il y a bien
> utilisation de l'index.
> Et en lancant dans un même lot un SELECT avec WITH (NOEXPAND) et un
> SELECT
> avec OPTION (EXPAND VIEWS), j'obtiens une répartition du temps
> d'exécution
> de
> la forme 5% / 95%.
> Et sans option, l'optimiseur choisi la version la plus lente... :-(
> Merci d'avance pour votre aide.
> Cordialement.
> JN BERGER
>
> "Philippe TROTIN [MS]" wrote:
>
>> Bonjour,
>>
>> Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le
>> cache
>> (DBCC FREEPROCACHE), ...
>>
>> Cordialement
>> _______________________________
>>
>> Philippe TROTIN
>> Microsoft Services France
>> _______________________________
>>
>> "Jean-Nicolas BERGER" >> écrit
>> dans le message de groupe de discussion :
>>
>> > Bonjour,
>> > j'ai un souci sous SQL 2005 Enterprise SP2.
>> > J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis
>> > j'ai
>> > créé un Index Unique Clustered sur cette vue.
>> > Tout s'est jusque là bien passé.
>> > le problème, c'est que lorsque je fais un select top 10 * from
>> > ma_vue,
>> > le
>> > plan d'exécution montre que le moteur de données refait les
>> > jointures
>> > avec
>> > les tables sous-jacentes, au lieu d'utiliser l'index créé.
>> > Quelqu'un aurait-il une piste?
>> > Merci.
>> > JN
>>
>>





Jean-Nicolas BERGER
Le #11869611
Réponse : Enterprise Edition

On n'est pas au bout...
JN.

"Med Bouchenafa" wrote:

En fait le comportement est celui d'une edition Standard alors qu'il s'agit
d'une edition Enterprise
Je lancerais a toutes fins utiles
SELECT SERVERPROPERTY ('Edition')

Med Bouchenafa


"Jean-Nicolas BERGER" message news:
> Je ne peux bien évidemment pas faire un 'ORDER BY Mon_Index', mais un
> 'ORDER
> BY LesChampsDeMonIndex' n'arrange pas le problème, le plan d'exécution
> montre
> toujours un passage par les tables sous-jacentes.
>
> Mytère, quand tu nous tiens...
> JN.
>
> "Philippe TROTIN [MS]" wrote:
>
>> Bonjour,
>>
>> Et si vous faites un SELECT TOP 10 * FROM ma_vue ORDER BY Mon_Index ?
>>
>> Cordialement
>> _______________________________
>>
>> Philippe TROTIN
>> Microsoft Services France
>> _______________________________
>>
>> "Jean-Nicolas BERGER" >> écrit
>> dans le message de groupe de discussion :
>>
>> > Bonjour,
>> > Le comportement est inchangé lorsque je met à jour les statistiques ou
>> > encore lorsque je vide le cache;
>> > Pour info, si je lance le SELECT avec WITH (NOEXPAND), il y a bien
>> > utilisation de l'index.
>> > Et en lancant dans un même lot un SELECT avec WITH (NOEXPAND) et un
>> > SELECT
>> > avec OPTION (EXPAND VIEWS), j'obtiens une répartition du temps
>> > d'exécution
>> > de
>> > la forme 5% / 95%.
>> > Et sans option, l'optimiseur choisi la version la plus lente... :-(
>> > Merci d'avance pour votre aide.
>> > Cordialement.
>> > JN BERGER
>> >
>> > "Philippe TROTIN [MS]" wrote:
>> >
>> >> Bonjour,
>> >>
>> >> Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le
>> >> cache
>> >> (DBCC FREEPROCACHE), ...
>> >>
>> >> Cordialement
>> >> _______________________________
>> >>
>> >> Philippe TROTIN
>> >> Microsoft Services France
>> >> _______________________________
>> >>
>> >> "Jean-Nicolas BERGER" >> >> écrit
>> >> dans le message de groupe de discussion :
>> >>
>> >> > Bonjour,
>> >> > j'ai un souci sous SQL 2005 Enterprise SP2.
>> >> > J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis
>> >> > j'ai
>> >> > créé un Index Unique Clustered sur cette vue.
>> >> > Tout s'est jusque là bien passé.
>> >> > le problème, c'est que lorsque je fais un select top 10 * from
>> >> > ma_vue,
>> >> > le
>> >> > plan d'exécution montre que le moteur de données refait les
>> >> > jointures
>> >> > avec
>> >> > les tables sous-jacentes, au lieu d'utiliser l'index créé.
>> >> > Quelqu'un aurait-il une piste?
>> >> > Merci.
>> >> > JN
>> >>
>> >>
>>





Philippe TROTIN [MS]
Le #11869601
Bonjour,

Pouvez vous nous scripter les tables utilisés, la vue et l'ensemble des
indexes associés pour voir ?

Avez vous essayé sur une base vide de reproduire le problème ?


Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" dans le message de groupe de discussion :

Je ne peux bien évidemment pas faire un 'ORDER BY Mon_Index', mais un
'ORDER
BY LesChampsDeMonIndex' n'arrange pas le problème, le plan d'exécution
montre
toujours un passage par les tables sous-jacentes.

Mytère, quand tu nous tiens...
JN.

"Philippe TROTIN [MS]" wrote:

Bonjour,

Et si vous faites un SELECT TOP 10 * FROM ma_vue ORDER BY Mon_Index ?

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Jean-Nicolas BERGER" écrit
dans le message de groupe de discussion :

> Bonjour,
> Le comportement est inchangé lorsque je met à jour les statistiques ou
> encore lorsque je vide le cache;
> Pour info, si je lance le SELECT avec WITH (NOEXPAND), il y a bien
> utilisation de l'index.
> Et en lancant dans un même lot un SELECT avec WITH (NOEXPAND) et un
> SELECT
> avec OPTION (EXPAND VIEWS), j'obtiens une répartition du temps
> d'exécution
> de
> la forme 5% / 95%.
> Et sans option, l'optimiseur choisi la version la plus lente... :-(
> Merci d'avance pour votre aide.
> Cordialement.
> JN BERGER
>
> "Philippe TROTIN [MS]" wrote:
>
>> Bonjour,
>>
>> Avez vous fait une mise à jour des stats (UPDATE STATISTICS), vidé le
>> cache
>> (DBCC FREEPROCACHE), ...
>>
>> Cordialement
>> _______________________________
>>
>> Philippe TROTIN
>> Microsoft Services France
>> _______________________________
>>
>> "Jean-Nicolas BERGER" >> écrit
>> dans le message de groupe de discussion :
>>
>> > Bonjour,
>> > j'ai un souci sous SQL 2005 Enterprise SP2.
>> > J'ai créé une vue (avec Schemabinding et tout ce qui va bien), puis
>> > j'ai
>> > créé un Index Unique Clustered sur cette vue.
>> > Tout s'est jusque là bien passé.
>> > le problème, c'est que lorsque je fais un select top 10 * from
>> > ma_vue,
>> > le
>> > plan d'exécution montre que le moteur de données refait les
>> > jointures
>> > avec
>> > les tables sous-jacentes, au lieu d'utiliser l'index créé.
>> > Quelqu'un aurait-il une piste?
>> > Merci.
>> > JN
>>
>>





Publicité
Poster une réponse
Anonyme