Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Indexes de vues non utilisés !

7 réponses
Avatar
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

7 réponses

Avatar
Philippe TROTIN [MS]
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" a é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


Avatar
Jean-Nicolas BERGER
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" a é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




Avatar
Philippe TROTIN [MS]
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" a é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" a
é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






Avatar
Jean-Nicolas BERGER
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" a é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" a
>> é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
>>
>>



Avatar
Med Bouchenafa
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" wrote in
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" a
é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" a
>> é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
>>
>>





Avatar
Jean-Nicolas BERGER
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" wrote in
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" a
>> é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" a
>> >> é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
>> >>
>> >>
>>





Avatar
Philippe TROTIN [MS]
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" a écrit
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" a
é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" a
>> é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
>>
>>