1. Différence entre DELETE, TRUNCATE et DROP ?
Réponse :
DELETE: ligne par ligne, journalisé, transactionnelTRUNCATE: rapide, non transactionnel, réinitialise les identitésDROP: supprime l’objet
2. Expliquez le fonctionnement d’un index B-Tree.
Réponse :
Structure équilibrée permettant des recherches en O(log n) avec navigation ordonnée des données.
3. Quand utiliser un index cluster vs non-cluster ?
Réponse :
Cluster : ordre physique des données (1 par table)
Non-cluster : pointeur vers les données, multiples possibles
4. Différence entre WHERE et HAVING ?
Réponse :
WHEREfiltre avant agrégationHAVINGfiltre aprèsGROUP BY
5. Comment analyser et optimiser une requête lente ?
Réponse :
Plan d’exécution
Index adaptés
Éviter
SELECT *Réduire les sous-requêtes coûteuses
6. Expliquez les différents niveaux d’isolation transactionnelle.
Réponse :
Read Uncommitted
Read Committed
Repeatable Read
Serializable
7. Qu’est-ce qu’un deadlock et comment le prévenir ?
Réponse :
Blocage circulaire entre transactions.
Prévention : ordre cohérent des accès, transactions courtes, index.
8. Différence entre INNER JOIN, LEFT JOIN, FULL JOIN ?
Réponse :
INNER: correspondances communesLEFT: toutes les lignes de gaucheFULL: union complète
9. Quand utiliser une vue matérialisée ?
Réponse :
Pour améliorer les performances des requêtes lourdes sur des données peu volatiles.
10. Différence entre ROW_NUMBER, RANK et DENSE_RANK ?
Réponse :
ROW_NUMBER: uniqueRANK: trous possiblesDENSE_RANK: pas de trous
11. Expliquez le partitionnement des tables.
Réponse :
Division logique des données pour améliorer performances et maintenance (range, hash, list).
12. Qu’est-ce qu’un index couvrant (covering index) ?
Réponse :
Index contenant toutes les colonnes nécessaires à la requête, évitant l’accès à la table.
13. Différence entre OLTP et OLAP ?
Réponse :
OLTP : transactions rapides, écriture fréquente
OLAP : analyses, lectures massives
14. Comment gérer la concurrence dans une base très sollicitée ?
Réponse :
Isolation adaptée
Optimistic locking
Indexation efficace
Sharding / partitionnement
15. Expliquez les Common Table Expressions (CTE).
Réponse :
CTE améliore lisibilité, permet la récursivité et remplace certaines sous-requêtes.
16. Différence entre EXISTS et IN ?
Réponse :
EXISTS: plus performant sur grandes tablesIN: simple mais moins efficace avec gros volumes
17. Comment gérer les données historiques (temporal data) ?
Réponse :
Tables d’historique
Colonnes
valid_from / valid_toTemporal tables (si supportées)
18. Qu’est-ce que le sharding ?
Réponse :
Distribution horizontale des données sur plusieurs bases pour la scalabilité.
19. Comment sécuriser une base de données SQL ?
Réponse :
Rôles et permissions
Chiffrement (au repos et en transit)
Audit et logging
Masquage des données
20. Décrivez une architecture SQL haute disponibilité.
Réponse :
Réplication
Clustering
Failover automatique
Backups + PRA/PCA
🧠 1️⃣ Lecture experte des plans d’exécution (10 Q&A)
1. Que représente le coût (%) dans un plan d’exécution ?
Réponse :
Le coût est une estimation relative basée sur l’I/O, le CPU et la mémoire.
Il sert à comparer des plans entre eux, pas à mesurer le temps réel.
2. Différence entre Index Seek et Index Scan ?
Réponse :
Index Seek : accès ciblé, très performant
Index Scan : parcours complet de l’index, coûteux sur gros volumes
3. Qu’est-ce qu’un Key Lookup et pourquoi est-il problématique ?
Réponse :
Accès supplémentaire à la table pour récupérer des colonnes manquantes.
Problématique si répété des milliers de fois → solution : index couvrant.
4. Comment identifier un problème de cardinalité ?
Réponse :
Écart important entre estimated rows et actual rows, souvent causé par des statistiques obsolètes.
5. Que signifie un opérateur Nested Loop coûteux ?
Réponse :
Indique souvent un mauvais choix de join sur de gros volumes.
Préférer Hash Join ou Merge Join selon le contexte.
6. À quoi sert l’opérateur Hash Match ?
Réponse :
Utilisé pour les joins ou agrégations sur de grands ensembles de données non triés.
7. Que révèle un Sort très coûteux ?
Réponse :
Manque d’index adapté à l’ORDER BY ou au GROUP BY.
8. Comment interpréter un Table Scan ?
Réponse :
Lecture complète de la table, souvent signe :
d’absence d’index
ou de requête non sélective
9. Pourquoi comparer plan estimé et plan réel ?
Réponse :
Pour détecter :
erreurs d’estimation
problèmes de paramètres (parameter sniffing)
10. Qu’est-ce que le Parameter Sniffing ?
Réponse :
Le plan est optimisé pour une valeur de paramètre initiale mais inefficace pour d’autres.
🚀 2️⃣ Optimisation SQL à grande échelle (10 Q&A)
11. Comment optimiser une base avec des tables > 1 milliard de lignes ?
Réponse :
Partitionnement
Index filtrés
Archivage des données historiques
Requêtes incrémentales
12. Quand utiliser le partitionnement plutôt que l’indexation ?
Réponse :
Pour les opérations bulk, purge rapide, maintenance simplifiée.
13. Différence entre vertical scaling et horizontal scaling ?
Réponse :
Vertical : plus de CPU/RAM
Horizontal : sharding / réplication
14. Comment réduire la contention sur une base très sollicitée ?
Réponse :
Transactions courtes
Index efficaces
Isolation optimiste
Séparation lecture / écriture
15. À quoi sert un index filtré ?
Réponse :
Optimise les requêtes sur un sous-ensemble précis de données.
16. Comment gérer les batchs massifs sans impacter la prod ?
Réponse :
Traitement par lots
Heures creuses
Limitation de verrous
Commit fréquents
17. Comment optimiser les requêtes analytiques lourdes ?
Réponse :
Vues matérialisées
Colonnes agrégées
Star schema
Index columnstore
18. Quand utiliser le sharding ?
Réponse :
Quand le volume ou la charge dépasse les capacités d’une seule instance.
19. Comment éviter les problèmes de tempdb ?
Réponse :
Index adaptés
Réduction des
SORTetHASHTaille préallouée
Fichiers multiples
20. Quels indicateurs surveiller pour une optimisation continue ?
Réponse :
Temps d’exécution
Wait stats
I/O
CPU
Deadlocks
Aucun commentaire:
Enregistrer un commentaire