Un tutoriel libre couvrant l'indexage SQL et l'optimisation SQL pour les développeurs : les détails inutiles sur le fonctionnement interne des bases de données sont limitées au strict minimum.
L'indexage SQL est la méthode d'optimisation la plus efficace en SQL et nécessite la même attention que la conception du schéma. Cependant, cette étape est souvent négligée lors du développement. Use The Index, Luke explique l'indexage SQL de la perspective du code source, en couvrant les outils ORM comme Hibernate et Doctrine.
L'indexage SQL dans MySQL, Oracle, SQL Server, etc.
L'indexage SQL est présenté comme un thème indépendant de la base de données. Pour faciliter la lecture, la partie principale du livre utilise seulement les termes provenant d'Oracle. Des notes spécifiques à certaines bases de données sont fournies comme indiqué ci-dessous.
- Db2 (LUW)
Use The Index, Luke couvre l'indexage SQL pour Db2 d'IBM. Les tests ont été réalisés avec Db2 pour Linux, UNIX et Windows, V10.5-12.1.
- MySQL
Use The Index, Luke couvre l'indexage SQL pour MySQL. Les tests ont été réalisés avec MySQL 9.4.0.
- Oracle
Use The Index, Luke couvre l'indexage SQL pour la base de données Oracle. Les tests ont été réalisés avec Oracle 23.9.
- PostgreSQL
Use The Index, Luke couvre l'indexage SQL pour PostgreSQL. Les tests ont été réalisés avec PostgreSQL 9.2-17.
- SQL Server
Use The Index, Luke couvre l'indexage SQL pour Microsoft SQL Server. Les tests ont été réalisés avec SQL Server 2012 - 2022.
Table des matières
Préface — Pourquoi les développeurs doivent utiliser des index
Anatomie d'un index — À quoi ressemble un index ?
Les nœuds feuilles — Une liste doublement liée
Le B-Tree — C'est un arbre balancé
Index lents, partie I — Deux ingrédients rendent les index lents
La clause Where — Indexer pour améliorer les performances en recherche
L'opérateur d'égalité — Recherche de la clé exacte
Clés primaires — Vérifier l'utilisation des index
Clés concaténées — Index multi-colonnes
Index lents, Partie II — Le premier ingrédient, revisité
Fonctions — Utiliser des fonctions dans la clause
where
Recherche insensible à la casse —
UPPER
etLOWER
Fonctions définies par l'utilisateur — Limitations des index utilisant une fonction
Sur-indexation — Éviter la redondance
Variables liées — Pour la sécurité et les performances
Rechercher un intervalle — Beyond equality
Plus grand, plus petit et
BETWEEN
— L'ordre des colonne importe encore plusIndexer des filtres
LIKE
—LIKE
n'est pas pour la recherche plein texteCombinaison d'index — Pourquoi ne pas utiliser un index pour chaque colonne ?
Index partiels — Indexer les lignes sélectionnées
NULL
dans la base de données Oracle — Une curiosité importanteNULL
dans les index — Chaque index est un index partielContraintes
NOT NULL
— affecte l'utilisation des indexÉmuler des index partiels — utiliser une indexation basée sur les fonctions
Conditions cachées — mauvaises utilisations standards
Dates — Faites particulièrement attention aux types
DATE
Chaînes numériques — Ne mélangez pas les types
Combiner des colonnes — utiliser des clauses
where
redondantesLogique intelligente — Une façon intelligente de rendre le SQL lent
Mathématique — les bases de données ne résolvent pas les équations
Tests et scalabilité — À propos du matériel
Volume de données — Le retour de la mauvaise indexation
Charge système — La charge de la production affecte les temps de réponse
Temps de réponse et bande passante — Scalabilité horizontale
L'opération de jointure — Rapide, si fait correctement
Boucles imbriquées — À propos du problème des sélections N+1 dans les ORM
Jointure de hachage — Requiert une approche complètement différente de l'indexation
Jointure par tri — Comme une fermeture éclaire sur deux ensembles triés
Regrouper les données — Pour réduire les entrées/sorties disques
Les prédicats des filtres pour index utilisés intentionellement — pour améliorer
LIKE
Parcours d'index couvrants — Éviter l'accès aux tables
Table organisée comme un index — Index regroupé sans les tables
Trier et grouper —
order by
sérialisé : une troisième puissance« Order By » indexé — interactions de la clause
where
ASC
/DESC
etNULL FIRST
/LAST
— changer l'ordre de l'index« Group By » indexé — Envoyer les données dans
group by
Résultats partiels — Paginer efficacement
Sélectionner les N premières lignes — si vous avez seulement besoin des quelques premières lignes
Récupérer la page suivante — Comparaison des méthodes de décalage et de recherche
Fonctions de fenêtrage — Pagination utilisant des requêtes analytiques
Insertion, suppression et mise à jour — Impacts de l'indexation sur les requêtes DML