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

Langage SQL Discussion :

Index sur sql


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Index sur sql
    Bonjour,

    J’ai juste une petite question sur la création d’index :

    Une fois un index créé, comment on peut l’exploiter ?

    Il suffit de faire une lecture sur la table pour que l’index soit reconnu et exploité ?

    Ou il faut lire la colonne indexée et lui indiquer qu’il existe bien un index sur cette colonne ?


    merci beaucoup

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En principe, le SGBD se débrouille tout seul pour utiliser les index nécessaires à l'optimisation de l'exécution de la requête. Dans certains cas, et peut-être pas dans tous les SGBD, tu peux forcer l'utilisation d'un index plutôt que celui qu'utiliserait "naturellement" le SGBD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    merci pour ta réponse,

    J’ai vu que l’index sera utilisé sauf si la colonne indexée est utilisée dans la clause where.

    Comment peut-on forcer l’utilisation d’un autre index que celui qu’utiliserait le SGBD ?

  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 759
    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 759
    Points : 52 540
    Points
    52 540
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par devparis2011 Voir le message
    Une fois un index créé, comment on peut l’exploiter ?
    C'est le SGBDR qui décide en fonction de nombreux éléments d'information dont il dispose : statistiques de distribution des données, contraintes, heuristique de la requête... Par exemple un index créé sur une colonne SEXE d'une table d'employée d'une entreprise minière ne sera jamais utilisé si l'on recherches des hommes (car il sont généralement très majoritaires).
    Or faire une recherche dans un index est beaucoup plus couteux que de lire séquentiellement des données, car l'algorithme de parcours des données est plus complexe.

    Il suffit de faire une lecture sur la table pour que l’index soit reconnu et exploité ?
    C'est l'optimiseur qui décide, et pas seulement pour les lectures, mais aussi pour les mise à jour (INSERT, UPDATE, DELETE) donc pour toutes les requêtes....

    Ou il faut lire la colonne indexée et lui indiquer qu’il existe bien un index sur cette colonne ?
    On peut généralement forcer l'utilisation d'un index pour une requête précise, mais c'est généralement une très mauvaise pratique, car si les données évolue il n'est pas sûr que l'index soit toujours aussi intéressant. En effet si le nombre de lignes retournées en utilisant l'index est important alors il vaut mieux lire directement la table. Le basculement se produisant généralement entre 10 et 30% (en dessous de 10% de lignes à retourner l'index sera systématiquement utilisé et au dessus de 30 % jamais).

    J’ai vu que l’index sera utilisé sauf si la colonne indexée est utilisée dans la clause where.
    Non, un index peut être utilisé pour de multiples clauses :
    SELECT, WHERE, GROUP BY, HAVING et ORDER BY, mais aussi dans bien d'autres cas....

    Comment peut-on forcer l’utilisation d’un autre index que celui qu’utiliserait le SGBD ?
    Cela dépend du SGBDR. Par exemple sous MS SQL Server il faut :
    • soit ajouter un tag (hint) dans la requête
    • soit forcer un plan de requête

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Matable WITH (INDEX (MonIndex))
    Mais comme déjà dit, c'est généralement catastrophique !

    Lisez ce que j'ai écrit sur le sujet : http://sqlpro.developpez.com/cours/quoi-indexer/

    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 à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    ta réponse est vraiment très bien ...elle m'encourage pour bien commencer ma semaine...

    merci le Pro du SQL

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

Discussions similaires

  1. [SQL Serveur 2005] Deux index sur le même champ
    Par Griswold dans le forum Développement
    Réponses: 3
    Dernier message: 28/06/2010, 18h41
  2. Index sur Sql Server 2005
    Par Naruto_kun dans le forum Développement
    Réponses: 13
    Dernier message: 11/02/2009, 15h16
  3. Réponses: 1
    Dernier message: 04/04/2007, 13h43
  4. [SQL 2005 SP1] Pb de plage d'index sur une table répliquée
    Par Peck777 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 28/08/2006, 18h55
  5. [Sql] index sur vue
    Par fxp17 dans le forum Oracle
    Réponses: 8
    Dernier message: 23/02/2006, 10h56

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