mardi 20 janvier 2026

20 QA - SQL



1. Différence entre DELETE, TRUNCATE et DROP ?

Réponse :

  • DELETE : ligne par ligne, journalisé, transactionnel

  • TRUNCATE : rapide, non transactionnel, réinitialise les identités

  • DROP : 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 :

  • WHERE filtre avant agrégation

  • HAVING filtre après GROUP 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 communes

  • LEFT : toutes les lignes de gauche

  • FULL : 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 : unique

  • RANK : trous possibles

  • DENSE_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 tables

  • IN : 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_to

  • Temporal 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 SORT et HASH

  • Taille 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

20 QA - SQL Lượt xem: