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 :

À partir de quand doit-on poser un INDEX ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut À partir de quand doit-on poser un INDEX ?
    Bonjour à tous,

    Je suis actuellement entrain de poser les indexes dans une base de données.

    Je me pose la question suivante, il est déconseillé de poser des indexes sur les petites tables (contenu avec quelques lignes).

    Mais comment savoir si table est "petite" ? Existe-il une formule ?

    Je pensai à ce genre de formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Taille de toutes les colonnes * nombre de lignes) / Taille d'une page
    Et donc si on dépasse X pages, alors il serait plus intéressant d'utiliser un INDEX.

    Mais que vaudrait X ?

    Merci

  2. #2
    Membre Expert

    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
    Par défaut
    L'Expert que je connais actuellement sur ce sujet est SqlPro il a écrit de nombreux articles sur le sujet et des scripts de maintenances des index sur SQL Server. Et vous trouverez la version complète et bien détaillée de TOUT ce qu'il faut savoir et savoir faire sur les index dans les fiches .PDF qui accompagne la dernière édition de son livre SQL 4è édition. Je vous le conseille vivement
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Etanne Voir le message
    ... il est déconseillé de poser des indexes sur les petites tables (contenu avec quelques lignes).
    Non, je n'ai jamais dit cela est cette remarque est stupide.

    Il est toujours conseillé de placer les bons index :
    - triviaux (FK, colonnes fréquemment cherchées...)
    - en fonction des requêtes réllement effectuées en production

    MAIS...

    Un index sur une petite table ne sert pas à grand chose.
    Par exemple si une table fait une page (les données des tables sont stockées dans des pages de 8 Ko) un index sur des données de cette table fera 2 pages au minimum (une page racine "d'aiguillage" + une page de données).
    L'utilisation de l'index sera plus donc plus couteux que le lecture directe de la page

    MAIS... (bis)
    Petite table peut devenir grande !
    Aussi par sécurité il convient de tout indexer, car de toutes façon c'est l'optimiseur qui choisira en final si l'index est plus ou moins couteux que la lecture directe de la table !

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

  4. #4
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Non, je n'ai jamais dit cela est cette remarque est stupide.
    J'ai repris d'info de la MSDN :
    Citation Envoyé par MSDN
    Une petite table est une table dont le contenu tient dans une ou quelques pages de données. Évitez d'indexer des tables très petites, car une analyse de table est généralement plus efficace. Elle évite le chargement et le traitement des pages d'index. En ne créant pas d'index sur de très petites tables, vous évitez que l'optimiseur en choisisse un.
    Citation Envoyé par SQLpro Voir le message
    Il est toujours conseillé de placer les bons index :
    - triviaux (FK, colonnes fréquemment cherchées...)
    - en fonction des requêtes réllement effectuées en production
    C'est ce que je fait actuellement, j'analyse l'ensemble des requêtes effectuées

    Citation Envoyé par SQLpro Voir le message
    Un index sur une petite table ne sert pas à grand chose.
    Par exemple si une table fait une page (les données des tables sont stockées dans des pages de 8 Ko) un index sur des données de cette table fera 2 pages au minimum (une page racine "d'aiguillage" + une page de données).
    L'utilisation de l'index sera plus donc plus couteux que le lecture directe de la page
    Puis-je à partir de 2 pages, en déduire que l'utilisation d'un index soit plus avantageux ?

    Citation Envoyé par SQLpro Voir le message
    Petite table peut devenir grande !
    Aussi par sécurité il convient de tout indexer, car de toutes façon c'est l'optimiseur qui choisira en final si l'index est plus ou moins couteux que la lecture directe de la table !
    Quand tu parles de l'optimiseur, tu parles de l'outil fournit avec SQL-Server ?

    Merci encore pour l'aide

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    L'optimiseur n'est pas "fourni avec SQL Server", c'est le moteur même de SQL Server.

    C'est le bout de code qui va décidé, après interprétation de ta requête, de comment l'exécuter. C'est un mécanisme interne à tout SGBD.

  6. #6
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Aaaaaaaaaaaaaah, c'était dans la MSDN .

    Le fait de mettre un index sur une table qui consomme qu'une page coûtera au moteur de choisir entre utiliser l'indexation et la lecture directe de la seule page.

    C'est cette décision qui représente un surcoût !

    Merci à tous de votre aide !

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Ouais enfin les décisions de l'optimiseur, c'est en général un micronième du coût de la requête.

    Ou alors c'est que tu fais sans arrêt "select id from matable where id = 1" avec une table ayant une unique colonne id et une unique ligne avec la valeur 1...

    Et à ce moment, les motivations d'utilisation d'un SGBD sont... assez obscures.

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

Discussions similaires

  1. [perf] poser un index sur un champ date
    Par kaymak dans le forum Administration
    Réponses: 4
    Dernier message: 04/02/2009, 11h02
  2. Réponses: 2
    Dernier message: 09/10/2008, 20h09
  3. [FT] quand doit-on creer une entrée?
    Par lichman dans le forum Administration système
    Réponses: 0
    Dernier message: 26/07/2007, 15h40
  4. Calcul de stat, a partir de quand?
    Par Vince7-7 dans le forum Oracle
    Réponses: 6
    Dernier message: 22/02/2007, 11h31

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