Un index agit comme une structure intermédiaire qui associe des clés spécifiques aux adresses physiques des enregistrements. Cette relation permet d'éviter la lecture séquentielle complète des tables.
Principe central : Mapping [Clé] → [Adresse Disque/Mémoire]
-- Exemple de création d'index simple
-- Mapping : référence_utilisateur vers position stockage
CREATE INDEX idx_ref_utilisateur ON comptes(ref_ut);
- Taxonomie des Structures d'Index
| Type d'Index | Mécanisme Sous-jacent | Cas d'Usage Principal | Complexité Temporelle |
|---|---|---|---|
| Hachage | Table de hachage (Couples Clé-Valeur) | Filtrage par égalité stricte | O(1) |
| Arbre-B+ | Arbre équilibré à N branches | Requêtes intervalles et tris | O(log n) |
| Liste Sauteuse | Chaînes de liens imbriquées | Accès rapide à données ordonnées | O(log n) |
| Textuel Complet | Inversion des listes de mots | Recherche sémantique ou mot-clé | O(variable) |
| Bitmap | Compression binaire | Colonnes faiblement sélectives | O(1) |
- Mécanismes Techniques Internes
3.1. Structure Arbre-B+ (Standard RDBMS)
- Architecture : Nœud racine distribuant vers des nœuds intermédiaires, terminant par des nœuds feuilles contenant les données.
- Bénéfices : Efficacité sur les lectures disques (alignement avec la taille des blocs) et gestion native du tri.
-- Scan d'intervalle sur une structure B+
SELECT numero_client FROM clients WHERE revenu_annuel >= 45000;
3.2. Indexation par Hachage (Stores Clé-Valeur)
- Usage idéal : Récupération instantanée d'une valeur unique.
- Limite : Incapable de traiter les requêtes de plage ou de tri sans parcourir l'ensemble.
# Redirection automatique de collisions via chaînage
ZADD session_data {timestamp} {payload_json}
3.3. Moteurs de Recherche Textuels
- Logique inversée : Le document pointe vers les termes, non l'inverse.
- Flux de requête : Saisie utilisateur → Extraction token → Identification IDs documents → Chargement du contenu.
- Règles de Conception Optimale
-
Sélectivité Élevée
- Privilégier les colonnes à forte variabilité (ex: UUID vs Genre).
- Ratio indicateur : (Nombre valeurs uniques / Total lignes). Un ratio supérieur à 0.3 est généralement favorable.
-
Index Couvrant (Covering Index)
- L'index doit cnotenir toutes les données demandées pour éviter le "lookup" vers la table principale.
-- Optimisation : Lecture directe depuis l'arbre CREATE INDEX idx_article_titre_contenu ON publications(titre, contenu); -- Exécution : Les données sont extraites sans accéder à la ligne base SELECT titre, contenu FROM publications WHERE id = 550; -
Ordre des Colonnes Composites
- Le moteur utilise l'index selon l'ordre de définition (gauche à droite).
-- Déclaration INDEX idx_region_statut (region_code, statut_cmd); -- Fonctionnel (utilise les deux colonnes) SELECT * FROM commandes WHERE region_code = 'FR' AND statut_cmd = 'PAYEE'; -- Non fonctionnel (ignore l'index car ne commence pas par la première colonne) SELECT * FROM commandes WHERE statut_cmd = 'PAYEE'; -
Gestion de la Densité
- Ajuster le taux d'utilisation des pages (Fill Factor) pour limiter les opérations de split lors des insertions fréquentes.
-
Analyse Coût/Bénéfice
| Métrique | Avantage | Contrepartie |
|---|---|---|
| Vitesse de Requêtage | Accélération exponentielle des recherches complexes | Ralentissement significatif des INSERT/UPDATE/DELETE |
| Espace Stockage | N/A | Augmentation du volume disque (souvent 20-40% supplémentaire) |
| Maintenance | Optimisation continue des plans d'exécution | Fragmentation accrue nécessitant des réorganisations périodiques |
- Études de Cas Réels
6.1. Système de Facturation
-- Schéma initial
CREATE TABLE factures_e (
num_facture INT PRIMARY KEY AUTO_INCREMENT,
ref_client INT NOT NULL,
montant_total DECIMAL(8, 2),
date_emission TIMESTAMP
);
-- Stratégie d'indexation ciblée
CREATE INDEX idx_facturation_client ON factures_e(ref_client, date_emission);
CREATE INDEX idx_recherche_montant ON factures_e(montant_total DESC);
6.2. Moteur d'Analyse Sémantique
{
"_source": {
"doc_uuid": "uuid-1234",
"text_body": "Optimisation algorithmique complexe",
"created_at": "2023-10-01"
}
}
-- Structure d'index inversé générée
{
"Optimisation": ["doc-1234"],
"algorithmique": ["doc-1234", "doc-9999"]
}
- Pièges Courants et Correction
-
Sur-indexation
- Signe : Nombre d'index supérieur à celui des colonnes critiques.
- Action : Consulter les logs de requêtes lentes pour identifier les index inutilisés avant suppression.
-
Dérive de Fragmentation
- Vérification via consultation des statistiques système :
SELECT table_name, ROUND((data_free / data_length) * 100, 2) AS percent_fragmentation FROM information_schema.tables WHERE table_schema = 'projet_db'; -
Incohérence des Types de Clés
- Erreur classique : Associer une clé primaire définie en
INTavec une clé étrangère enVARCHAR. - Correction : Assurer l'uniformité totale des définitions de colonnes entre tables liées.
- Erreur classique : Associer une clé primaire définie en
-
Indexation Distribué et NoSQL
Arbre de Fusion Logiquement Structuré (LSM)
Utilisé dans les systèmes orientés écriture massive (Cassandra, RocksDB).
Flow : Buffer RAM (Memtable) → Fichiers Discs (SSTables) → Compression par niveaux
- Force : Écritures séquentielles très rapides sur disque.
- Compromis : Lectures potentiellement plus lentes nécessitant une fusion de fichiers multiples.
Liste Sauteuse (Skip List)
Alternative probabiliste aux arbres pour les collections ordonnées dynamiques.
Niveau 0 : [A] -- [B] -- [C] -- [D]
Niveau 1 : [B] ----------- [D]
- Application : Structures de données en mémoire (comme Redis ZSet).
- Atout : Simplicité de mise en œuvre pour les insertions/concurrence.