IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Index totalement inutilisé et invisible


Sujet :

Développement SQL Server

  1. #1
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut Index totalement inutilisé et invisible
    Bonjour,

    J'ai un problème sur les index. Dans une procédure stockée dont je tente d'optimiser en utilisant des tables temporaire et des index, je constate que mes index ne sont pas utilisé. Cela peut être du au faite que le moteur estime qu'il y a pas lieu de l'utiliser, mais pour être sur j'ai voulu forcer l'index en utilisant la syntaxe suivante WITH(INDEX(MonIndex)) . Là je reçois une insulte me disant que cette index n'existe pas.
    Dans le plan d'exécution c'est à base de Table scan alors qu'il devrait utiliser l'index. Je rajouterais même qu'il en utilise aucune car il y en a plusieurs dans la procédure.
    J'avoue ne pas comprendre pourquoi. Aurai-je raté quelque chose ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE #TMP_TABLE(
      Col1 UNIQUEIDENTIFIER,
      Col2 UNIQUEIDENTIFIER,
    )
     
     
    CREATE INDEX MonIdex1 ON #TMP_TABLE(Col1)
    CREATE INDEX MonIdex2 ON #TMP_TABLE(Col2)
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Donne tout le code, mais le mélange DML / DDL dans une routine impose des recompilations et l'analyse primaire risque de ne pas valider....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Merci pour ton intervention.
    Le code est assez gros et comme c'est une procédure d'une entreprise je vais pas la montrer en public, mais le code ci-dessus est un peut prêt ce que je fais. Je peux néanmoins l'envoyer en MP si c'est vous êtes d'accord.
    Etant donné que le Go ne peut être présent dans une routine, y aurait-il un moyen de forcer la prise en compte dans le DDL.

    Avec Sybase j'avais pas ce problème et je me suis pas poser cette question sur SQLServer.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  4. #4
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    J'ai un poil avancé sur cette histoire. Ce dont je comprend c'est que SQL Server ne prend pas en compte la creation d'index de manière brute. Pour que ça puisse prendre effet il faut créer des clés primaires dans la mesure ou c'est possible. A ce moment là les index qui ont été créés seront utilisé par le moteur. Mais je peux vraiment dire que cette affaire soit résolu car c'est une méthode de brigand
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par berceker united Voir le message
    Ce dont je comprend c'est que SQL Server ne prend pas en compte la creation d'index de manière brute
    Alors vous avez dû mal comprendre, car SQL Server sait utiliser un index sur une table temporaire, dans une procédure stockée, même si celui-ci vient d'être créé comme ça semble votre cas.

    Bien sûr, comme pour n'importe quel index, il ne l'utilisera que s'il juge que ce sera rentable.

    A défaut d'avoir le code de toute le procédure, peut-on au moins avoir le vrai CREATE de la table temporaire, celui des index, et la requete en question ?
    Au besoin, anonymisez le nom des tables/colonnes

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Bonjour,

    Je reviens avec mon affaire et je viens de comprendre ou est mon erreur, si on peut appeler cela une erreur. En faite j'ai utilisé la commande suivante pour régarder le plan d'exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SET SHOWPLAN_ALL ON
    GO
     
    SET FMTONLY ON
    GO
    Le souci c'est qu'en utilisant cela ça, ça change le plan d'exécution et la manière dont le code est interprété et je viens de comprendre que l'index n'ext pas visible donc j'ai logiquement des [Table scan]. En regardant le vrai plan d'exécution l'index est visible et réellement utilisé.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

Discussions similaires

  1. Index inutilisé ?
    Par ilalaina dans le forum Administration
    Réponses: 10
    Dernier message: 24/04/2009, 17h44
  2. Taille d'index enorme sous invision power board
    Par Bogdahn dans le forum Administration
    Réponses: 0
    Dernier message: 24/11/2008, 15h45
  3. mot cle invisible dans l'index(workshop help html)
    Par bbelle08 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 17/08/2007, 09h32
  4. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11
  5. Réponses: 8
    Dernier message: 05/06/2002, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo