Le modèle relationnel et le langage SQL
- Les spécificités des bases de données relationnelles et du langage SQL.
- La normalisation du modèle de données.
- Les notions d'écriture ensembliste et déclarative. Les spécificités du dialecte Transact-SQL.
- Le fonctionnement de l'optimiseur SQL.
Travaux pratiques
Expérimentation de requêtes sur des modèles plus ou moins normalisés.
Réussir l'indexation
- Les bases de l'indexation. La structure en B-Tree et les différents types d'index.
- Comment choisir ses index en fonction des requêtes ?
- La notion de couverture de requête par un index.
- Le concept de SARG (Search Argument) pour favoriser l'utilisation de l'index.
- Utilisation du profiler et des événements étendus (xevents).
- Utiliser le Query Store pour détecter les régressions de plans.
Travaux pratiques
Indexation et traces de requêtes problématiques.
Écrire des requêtes performantes
- Les règles de bonne écriture des requêtes SQL.
- Lire et utiliser les statistiques d'exécution et le plan d'exécution.
- Optimiser le code de mise à jour des données.
- Erreurs les plus communes : fonctions utilisateurs, comparaisons insensibles à la casse, estimation de cardinalité.
Travaux pratiques
Réécriture de requêtes peu performantes.
Remplacer tables temporaires et curseurs
- Maîtriser les sous-requêtes et les opérateurs relationnels.
- Utiliser l'instruction MERGE pour les mises à jour de données complexes.
- Créer des tables de nombres et de dates pour résoudre les problèmes de façon relationnelle.
- Utiliser les fonctions de fenêtrage et les fonctions statistiques.
- Écrire du code récursif en utilisant des expressions de table.
Travaux pratiques
Résolution de problématiques complexes par des requêtes ensemblistes.
Bonnes pratiques pour les modules de code
- Règles pour l'écriture de procédures stockées.
- Maîtriser la compilation et recompilation.
- Minimiser l'impact des déclencheurs. Comprendre les transactions et les problèmes de verrouillage.
- Utiliser les niveaux d'isolation de la transaction.
Travaux pratiques
Écriture d'une procédure stockée optimisée.