
Voici quelques bonnes pratiques SQL Server, classées par domaine
1. Modélisation & Conception
- Normaliser intelligemment : éviter les redondances inutiles tout en gardant en tête les besoins de performance (parfois une dénormalisation ciblée est préférable).
- Utiliser des types de données appropriés (pas de
NVARCHAR(MAX)pour 50 caractères). - Nommer clairement les objets (tables, colonnes, index) pour faciliter la maintenance.
- Éviter les colonnes calculées persistantes inutiles si elles peuvent être gérées en requête ou vue.
- Prévoir les clés primaires stables et courtes (idéalement entières et indexées).
2. Indexation
- Créer des index adaptés aux requêtes fréquentes (éviter l’over-indexation).
- Utiliser les index couvrants pour réduire les lectures disque.
- Mettre à jour les statistiques régulièrement (
AUTO_UPDATE_STATISTICSactivé + maintenance plan). - Surveiller les index inutilisés et les index dupliqués pour les supprimer.
- Limiter les index sur les colonnes fortement mises à jour (coût en écriture).
3. Écriture des requêtes
- Sélectionner uniquement les colonnes nécessaires (
SELECT col1, col2au lieu deSELECT *). - Utiliser les jointures appropriées (INNER, LEFT, etc.) et éviter les cartésiens involontaires.
- Filtrer tôt dans la requête pour limiter les lignes traitées.
- Privilégier les fonctions natives plutôt que du code T-SQL trop complexe en UDF scalaires.
- Éviter les fonctions sur colonnes dans les clauses WHERE (ça empêche l’usage d’index).
- Utiliser les paramètres plutôt que la concaténation pour éviter l’injection SQL et bénéficier du cache plan.
4. Transactions & Verrouillage
- Garder les transactions aussi courtes que possible pour réduire la contention.
- Utiliser la bonne isolation transactionnelle (READ COMMITTED, SNAPSHOT, etc.) selon le besoin.
- Vérifier les deadlocks et ajuster la logique ou l’ordre des opérations.
- Ne pas utiliser
BEGIN TRANsansCOMMITouROLLBACKclair.
5. Maintenance
- Mettre en place un plan de sauvegarde/restauration testé (ne pas attendre une panne pour tester la restauration).
- Surveiller la fragmentation des index et réorganiser/réindexer selon les seuils.
- Garder les logs sous contrôle (taille, archivage).
- Surveiller les bases orphelines ou inutilisées.
- Documenter les modifications de schéma.
6. Sécurité
- Principe du moindre privilège (pas de
sapour tout le monde). - Utiliser l’authentification Windows si possible.
- Masquer ou chiffrer les données sensibles (Always Encrypted, TDE, etc.).
- Auditer les connexions et changements critiques.
- Éviter le code SQL dynamique non paramétré.
7. Surveillance & Performance
- Activer et consulter le Query Store pour suivre les régressions de performance.
- Surveiller les requêtes lentes (
sys.dm_exec_query_stats,Extended Events). - Analyser les plans d’exécution pour identifier les scans non désirés.
- Mettre en place des alertes SQL Agent (erreurs critiques, espace disque, blocages longs).
- Documenter les paramètres système (MAXDOP, Cost Threshold, memory settings).