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 :

Absence d'opération lookup RID


Sujet :

Développement SQL Server

  1. #1
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut Absence d'opération lookup RID
    Bonjour a tous

    Aujourd’hui j'ai pensé a faire un petit test pour faire voir comment optimiser et retirer l'opération Lookup RID
    pour cela j'ai pensé a crée ce scénario ,créer un table nommé source avec un index cluster
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE [dbo].[source](
    	[id] [bigint] IDENTITY(1,1) NOT NULL,
    	[nom] [varchar](50) NOT NULL,
    	[Quantité] [int] NOT NULL,
    	[pren] [nvarchar](50) NULL,
     CONSTRAINT [PK_source] PRIMARY KEY CLUSTERED 
    (
    	[id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    Maintenant, j'ai lancer l'opération select et j'ai vérifier leur plan d'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /****** Script de la commande SelectTopNRows à partir de SSMS  ******/
    SELECT TOP 1000 [id]
          ,[nom]
          ,[Quantité]
          ,[pren]
      FROM [lookup_ssis].[dbo].[source]
      where nom='Abdallah'
    -->voir imprime écran 1
    vu qu'n index cluster est créé sur la table Il est clair que l'optimiseur du requête a pris le choix de faire un balayage d'index cluster
    ensuite j'ai penser a crée un index NONCLUSTERED sur la colonne qui contient la clause where qui dans mon cas le colonne nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      CREATE NONCLUSTERED INDEX [IX_OneIndex_nom] ON [dbo].[source]
    (
    [nom] ASC
    ) ON [PRIMARY]
    GO
    Après la création de l'index non-cluster, j'ai penser a lancer du nouveau mon select et vérifions le plan d'exécution , je viens de trouver que l'optimiseur a choisit de faire une autre fois un scan du mon index cluster
    alors ma question pourquoi l’optimiseur du requête n'a pas pris en considération mon index noncluster surtout qu'il contiens le colonne de la clause where pour récupérer les données de la table surtout que j'attendais comme un plan d’exécution avec une opération de type seek index sur l'index noncluster avec une opération lookup RID pour les colonnes utilisées dans la clause SELECT et qui ne sont pas encore partie de mon index non cluster
    merci pour notre expert
    Images attachées Images attachées  

  2. #2
    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,

    Combien de lignes contient votre table ?
    si elle n'en contient que très peu, alors ce comportement est normal : il sera plus couteux de faire un recherche d'index puis un lookup que de lire directement l’unique page que contient la table et de faire le filtre : l'index n'est pas assez discriminant puisqu'au final, 100% des lignes (si votre table n'a qu'une seule ligne) correspondent au filtre.

    Ajoutez des lignes dans votre table qui ne vérifient pas le filtre, l'index sera alors utilisé

  3. #3
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    veuillez m'excuser pour cet oubli , le nbre des lignes pour le tableau est faible donc c'est normal pour ce comportement

    Je vous remercie pour l'intérêt que vous avez donné à mon sujet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  2. Lookup de valeurs
    Par Sylvain James dans le forum XMLRAD
    Réponses: 4
    Dernier message: 26/09/2003, 13h47
  3. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45
  4. opération en XSL
    Par rastapopulos dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/03/2003, 22h39
  5. champ lookup sur querydataSet
    Par freinhar dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/12/2002, 17h29

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