Citation:
Envoyé par
devparis2011
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.
Citation:
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....
Citation:
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).
Citation:
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....
Citation:
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:
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 +