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

Administration SQL Server Discussion :

Statistiques non créées


Sujet :

Administration SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut Statistiques non créées
    Je repose ma question

    Je constate que le moteur de base de données décide de ne pas créer de statistiques sur la colonne creation_date de la table T_TEST !
    Sur les autres colonnes, les statistiques sont bien crées !
    1.) Comment justifier ce choix du moteur ?
    2.) Dans quel(s) cas le moteur de base de données ferme les yeux sur la création des statistiques sur une colonne ?

    Voici la table T_TEST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    --Création de la table
    SET NOCOUNT ON 
    IF OBJECT_ID('dbo.T_TEST') IS NOT NULL 
    DROP TABLE dbo.T_TEST 
    CREATE TABLE dbo.T_TEST 
    ( 
      id int identity(1,1), 
      val varchar(10), 
      creation_date datetime 
    )
     
    --Chargement d'1 million de lignes dans la table 
    DECLARE @counter int; 
    SET @counter = 1; 
    WHILE @counter <= 1000000 
      BEGIN 
      INSERT INTO T_TEST(val,creation_date) VALUES(convert(varchar(10),(LEFT(convert(bigint,RAND()*10000000),6))),getdate()); 
      SET @counter = @counter + 1 
    END;

    Pour mettre en évidence l’absence de statistiques sur la colonne creation_date je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC SHOW_STATISTICS ('dbo.T_TEST',creation_date)
    et SSMS me renvoie le message d'erreur 2767:
    Msg 2767, Level 16, State 1, Line 1
    Impossible de localiser les statistiques 'create_date' dans le catalogue système.
    Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système.


    Merci de m'éclairer
    Etienne ZINZINDOHOUE
    Billets-Articles

  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 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Les stats ne sont créées que si des requêtes vont portées sur cette colonne.

    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
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Les stats ne sont créées que si des requêtes vont portées sur cette colonne.
    A +
    Des requêtes concernant cette colonne sont bien exécuter mais cela ne change rien. j'ai toujours le même d'erreur
    Msg 2767, Level 16, State 1, Line 1
    Impossible de localiser les statistiques 'create_date' dans le catalogue système.
    Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système.
    A l'exécution de la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC SHOW_STATISTICS ('dbo.T_TEST',create_date)
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    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 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Les statistiques auto créée ne portent pas le nom de la colonne, mais un nom en "_WA_Sys_00000004_00000005"
    Tu peut les voir avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.stats
    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/ * * * * *

  5. #5
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Les statistiques auto créée ne portent pas le nom de la colonne, mais un nom en "_WA_Sys_00000004_00000005"
    Tu peut les voir avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.stats
    A +
    D'accord, mais comment savoir qu'un _WA_Sys_0000..... concerne tel ou tel autre colonne ?


    Et pourquoi mon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC SHOW_STATISTICS ('dbo.T_TEST',creation_date)
    me renvoie un message d'erreur ?

    Alors que pour les autres colonnes tout se passe bien ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  6. #6
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    D'accord, mais comment savoir qu'un _WA_Sys_0000..... concerne tel ou tel autre colonne ?
    J'ai répondu très vite, voici comment obtenir les statistiques auto et leur colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT OBJECT_NAME(s.object_id) AS [Nom_Table]
        ,COL_NAME(sc.object_id, sc.column_id) AS [Nom_Colonne]
        ,s.name AS [Nom_Statistique]
        , STATS_DATE (s.object_id,s.stats_id) 	AS [Date MAJ des statistiques]
    FROM sys.stats s INNER JOIN sys.stats_columns sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id 
    WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1 
    AND s.name like '_WA%' -- Statistique automatique 
    ORDER BY [Nom_Table];
    Mais ma question initiale demeure.
    Pourquoi la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC SHOW_STATISTICS ('dbo.T_TEST',create_date)
    me renvoie cette erreur :
    Msg 2767, Level 16, State 1, Line 1
    Impossible de localiser les statistiques 'create_date' dans le catalogue système.
    Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système.
    Pourquoi le moteur ne crée pas des stats sur la colonne create_date ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Pourquoi le moteur ne crée pas des stats sur la colonne create_date ?
    Parce qu'elle n'a pas été utilisée comme prédicat dans aucune des requêtes (si on se réfère à ton post précédent). Et parce que les colonnes incluses n'ont pas de stats générées à la création d'un index nc.
    Emmanuel T.

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous pouviez agrémenter votre requête pour obtenir les colonnes qui participent à la statistique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT        S.name AS statistic_name
            , C.name AS column_name
    FROM        sys.stats AS S
    INNER JOIN    sys.stats_columns AS SC
                ON S.object_id = SC.object_id
                AND S.stats_id = SC.stats_id
    INNER JOIN    sys.columns AS C
                ON SC.object_id = C.object_id
                AND SC.column_id = C.column_id
    INNER JOIN    sys.tables AS T
                ON T.object_id = C.object_id
    WHERE        T.name = 'maTable'
    ORDER BY    S.name
            , C.name
            , SC.stats_column_id
    Les statistiques créées automatiquement ne le sont que sur une seule colonne.
    Donc si aucune de vos requêtes ne filtre seulement sur celle-ci, et que le filtre de votre requête contient une colonne plus sélective que create_date, l'optimiseur choisira probablement celle-ci pour calculer le plan ...

    @++

  9. #9
    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 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT OBJECT_NAME(s.object_id) AS [Nom_Table]
        ,COL_NAME(sc.object_id, sc.column_id) AS [Nom_Colonne]
        ,s.name AS [Nom_Statistique]
        , STATS_DATE (s.object_id,s.stats_id) 	AS [Date MAJ des statistiques]
    FROM sys.stats s INNER JOIN sys.stats_columns sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id 
    WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1 
    AND s.name like '_WA%' -- Statistique automatique 
    ORDER BY [Nom_Table];
    Ne te fie pas au nom _WA... mais prend la valeur de la colonne is_hypothetical.

    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/ * * * * *

  10. #10
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par kagemaru Voir le message
    Parce qu'elle n'a pas été utilisée comme prédicat dans aucune des requêtes (si on se réfère à ton post précédent). Et parce que les colonnes incluses n'ont pas de stats générées à la création d'un index nc.
    YES

    c'est bien ça et le BOL le dit clairement dans le paragraphe "Quand créer des statistiques", je cite le BOL :
    1. L'optimiseur de requête crée des statistiques pour les index de tables ou de vues lors de la création des index. Ces statistiques sont créées sur les colonnes de clés de l'index

    C'est qui explique que la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DBCC SHOW_STATISTICS ('dbo.T_TEST',val)
    marche sans problème, vu que j'avais créé un index ayant comme clé la colonne val
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CREATE INDEX IXNC_val_INCLUDE_creationdate_id ON T_TEST (val) INCLUDE (creation_date,id)
    2.L'optimiseur de requête crée des statistiques pour les colonnes uniques des prédicats de requête lorsque l'option AUTO_CREATE_STATISTICS est activée

    ce qui explique pourquoi la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DBCC SHOW_STATISTICS ('dbo.T_TEST',id)
    marche bien. Parce que j'avais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE dbo.T_TEST SET val = '0' WHERE dbo.T_TEST.id <=10000
    Et jusque là effectivement il n'y avait pas de requête avec la colonne create_date comme prédicat !

    c'est pourquoi SSMS me renvoie le message d'erreur 2767.


    Maintenant, quand je fais par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 10 * 
    FROM T_TEST
    WHERE creation_date > '20100917'
    Je constate que les statistiques sont créées sur la colonne
    creation_date et la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DBCC SHOW_STATISTICS ('dbo.T_TEST',creation_date )
    marche bien.

    Mais pourquoi le fait de créer par exemple les index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX IXNC_val_id_creationdate ON T_TEST (val,id,creation_date) 
    CREATE INDEX IXNC_val_creationdate_id ON T_TEST (val,creation_date,id)
    id, val et create_date sont les clés de l'index ne provoque pas la création de statistiques sur chacune des index ?! Parce que si on se refère à ce que dit le BOL dans mon 1. il devrait y avoir création de stats sur les colonnes clés de l'index ?!
    Etienne ZINZINDOHOUE
    Billets-Articles

  11. #11
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Vous pouviez agrémenter votre requête pour obtenir les colonnes qui participent à la statistique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT        S.name AS statistic_name
            , C.name AS column_name
    FROM        sys.stats AS S
    INNER JOIN    sys.stats_columns AS SC
                ON S.object_id = SC.object_id
                AND S.stats_id = SC.stats_id
    INNER JOIN    sys.columns AS C
                ON SC.object_id = C.object_id
                AND SC.column_id = C.column_id
    INNER JOIN    sys.tables AS T
                ON T.object_id = C.object_id
    WHERE        T.name = 'maTable'
    ORDER BY    S.name
            , C.name
            , SC.stats_column_id
    Oui ta requête renvoie effectivement les différentes colonnes et les stats correspondant. Mais le cas de ta requête le référentiel est la table

    Par contre pour la requête que j'ai proposé le référentiel est la base .

    Donc c'est deux visions des choses et je suis tenté de dire que ta requête est INCLUSE dans la mienne


    Citation Envoyé par elsuket Voir le message
    Les statistiques créées automatiquement ne le sont que sur une seule colonne. Donc si aucune de vos requêtes ne filtre seulement sur celle-ci, et que le filtre de votre requête contient une colonne plus sélective que create_date, l'optimiseur choisira probablement celle-ci pour calculer le plan ...
    @++
    D'accord, mais le BOL dit ceci :

    L'optimiseur de requête crée des statistiques pour les index de tables ou de vues lors de la création des index. Ces statistiques sont créées sur les colonnes de clés de l'index.

    Dans mon exemple j'avais bien créé les index suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX IXNC_val_id_creationdate ON T_TEST (val,id,creation_date) 
    CREATE INDEX IXNC_val_creationdate_id ON T_TEST (val,creation_date,id)
    val, id et create_date constituent la clé de l'index.

    Ma question : Pourquoi dans mon cas l'optimiseur ne crée pas des stats sur chacune des colonnes constituant la clé de l'index ???

    Merci de m'éclairer
    Etienne ZINZINDOHOUE
    Billets-Articles

  12. #12
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    En regardant la commande DBCC SHOW_STATISTICS sur les index concernés tu comprendras.

    Il faut regarder la partie DENSITY_VECTOR

    Les statistiques permettent de connaître les valeurs distinctes de chaque préfixe de colones composant la clé. Dans ton cas pour l'index IXNC_val_id_creationdate :

    - (val)
    - (val,id)
    - (val,id,creation_date)

    Un index étant vectorisé au départ il n'y a aucun intérêt à avoir les statistiques de chaque colonne seule. Ce qui est intéressant et utile pour le moteur est de connaître les statistiques de l'index (donc de connaître la répartition des valeurs des colonnes composant l'index dans son ensemble).

    ++

  13. #13
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Ne te fie pas au nom _WA... mais prend la valeur de la colonne is_hypothetical.
    A +
    Je n'ai pas bien compris ta proposition sur la colonne is_hypothetical.

    Par ailleurs, le BOL dit ceci à propos de l'index hypothétique (is_hypothetical = 1)
    L'index hypothétique ne peut être utilisé directement comme un chemin d'accès aux données. Les index hypothétiques conservent des statistiques au niveau des colonnes et sont gérés et utilisés par l'Assistant Paramétrage du moteur de base de données.
    Donc ces index hypothétiques sont gérés par Assistant Paramétrage du moteur de base de données, ils ne m’intéressent donc pas !? Non ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  14. #14
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    En regardant la commande DBCC SHOW_STATISTICS sur les index concernés tu comprendras.

    Il faut regarder la partie DENSITY_VECTOR

    Les statistiques permettent de connaître les valeurs distinctes de chaque préfixe de colones composant la clé. Dans ton cas pour l'index IXNC_val_id_creationdate :

    - (val)
    - (val,id)
    - (val,id,creation_date)

    Un index étant vectorisé au départ il n'y a aucun intérêt à avoir les statistiques de chaque colonne seule. Ce qui est intéressant et utile pour le moteur est de connaître les statistiques de l'index (donc de connaître la répartition des valeurs des colonnes composant l'index dans son ensemble).

    ++
    C'est ce que je pensais aussi. Comme la clé de l'index est une clé composite. Le moteur crée les stats sur cette clé composite.
    Etienne ZINZINDOHOUE
    Billets-Articles

  15. #15
    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 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    Je n'ai pas bien compris ta proposition sur la colonne is_hypothetical.
    Je me suis gouré, c'est auto_created = 1 => _WA_Sys...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.stats WHERE auto_created = 1
    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/ * * * * *

  16. #16
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Oui ta requête renvoie effectivement les différentes colonnes et les stats correspondant. Mais le cas de ta requête le référentiel est la table

    Par contre pour la requête que j'ai proposé le référentiel est la base .
    Je ne comprend pas ... Les statistiques ne sont ni sur une base de données, ni sur une table, mais sur des colonnes.
    Il s'agit ici d'un filtre qui n'est pas le même ...

    C'est ce que je pensais aussi. Comme la clé de l'index est une clé composite. Le moteur crée les stats sur cette clé composite.
    Encore une fois tout dépend de la requête que vous exécutez sur la table.
    Et jusqu'ici, nous n'avons pas cette requête ...
    Celle de votre billet filtre, si je me rappelle bien, sur la colonne val, et non pas sur create_date ...

    @++

  17. #17
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Je me suis gouré, c'est auto_created = 1 => _WA_Sys...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.stats WHERE auto_created = 1
    A +

    Exact

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT OBJECT_NAME(s.object_id) AS [Nom_Table]
        ,COL_NAME(sc.object_id, sc.column_id) AS [Nom_Colonne]
        ,s.name AS [Nom_Statistique]
        , STATS_DATE (s.object_id,s.stats_id) 	AS [Date MAJ des statistiques]
    FROM sys.stats s INNER JOIN sys.stats_columns sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id 
    WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1 
    AND s.auto_created = 1   -- Statistique automatique
    Merci
    Etienne ZINZINDOHOUE
    Billets-Articles

  18. #18
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Je ne comprend pas ... Les statistiques ne sont ni sur une base de données, ni sur une table, mais sur des colonnes.
    Il s'agit ici d'un filtre qui n'est pas le même ...
    Oui c'est vrai. c'est une question de filtre
    Quand je mets ton WHERE en commentaire on retrouve les mêmes résultats.

    Sorry

    Oublie donc ce que j'ai dis sur les référentiels c'est des histoires

    Citation Envoyé par elsuket Voir le message
    Encore une fois tout dépend de la requête que vous exécutez sur la table.
    Et jusqu'ici, nous n'avons pas cette requête ...
    Celle de votre billet filtre, si je me rappelle bien, sur la colonne val, et non pas sur create_date ...
    @++
    C'est bien ça, tu as raison

    Merci
    Etienne ZINZINDOHOUE
    Billets-Articles

  19. #19
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Sorry
    Pas de problème

    Oublie donc ce que j'ai dis sur les référentiels c'est des histoires
    Ha pâs biên ça

    @++

  20. #20
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Etienne ZINZINDOHOUE
    Billets-Articles

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

Discussions similaires

  1. JPA Hibernate Index non crée dans Mysql
    Par fvisticot dans le forum JPA
    Réponses: 5
    Dernier message: 24/10/2010, 04h35
  2. Optimiseur et statistiques non rafraîchies
    Par pacmann dans le forum Administration
    Réponses: 4
    Dernier message: 06/11/2008, 17h47
  3. Oracle 10gR2 : vue systables non crées
    Par rourou dans le forum Oracle
    Réponses: 8
    Dernier message: 22/08/2008, 11h50
  4. [debutant] Hibernate : table non crée
    Par lilou77 dans le forum Hibernate
    Réponses: 10
    Dernier message: 06/01/2006, 16h32
  5. Impossible d'accéder aux tables non créées par dbo
    Par Pete dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 14h01

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