Le 50 principali domande e risposte dell'intervista T-SQL (2026)

Domande e risposte per l'intervista T-SQL

Ti stai preparando per un colloquio T-SQL? รˆ il momento di approfondire la tua comprensione di come funzionano realmente i database sotto la superficie. Con Domande per il colloquio T-SQL, i reclutatori valutano non solo la capacitร  di ricordare la sintassi, ma anche la padronanza della manipolazione dei dati, dell'ottimizzazione e della strutturazione logica.

Le opportunitร  in questo settore continuano ad aumentare, poichรฉ le aziende dipendono da insight basati sui dati. I candidati con solide competenze tecniche, capacitร  di analisi e capacitร  di problem-solving nel mondo reale si distinguono, sia che si tratti di neolaureati o professionisti con 5-10 anni di esperienza. Comprendere domande e risposte sia a livello base che avanzato aiuta team leader, manager e tecnici senior a identificare solide competenze SQL ed esperienza a livello di root.

La nostra guida si basa sulle intuizioni di oltre 65 responsabili delle assunzioni, piรน di 40 sviluppatori senior e professionisti dei dati di diversi settori, garantendo una copertura che va dalla logica SQL fondamentale alle tecniche di ottimizzazione avanzate apprezzate dai leader tecnici di tutto il mondo.
Per saperne di piรน ...

๐Ÿ‘‰ Download gratuito del PDF: Domande e risposte per l'intervista T-SQL

Domande e risposte principali per i colloqui T-SQL

1) Che cos'รจ T-SQL e in cosa differisce dal linguaggio SQL standard?

Transact-SQL (T-SQL) รจ Microsoftestensione proprietaria del linguaggio SQL, utilizzata principalmente con Microsoft SQL ServerMigliora il linguaggio SQL standard introducendo funzionalitร  di programmazione procedurale come variabili, condizioni, cicli, gestione degli errori e funzioni integrate. Mentre il linguaggio SQL standard si concentra sulla manipolazione dei dati (SELECT, INSERT, UPDATE, DELETE), T-SQL supporta istruzioni di controllo del flusso (IFโ€ฆELSE, WHILE), gestione delle transazioni e funzioni di sistema che consentono agli sviluppatori di scrivere script complessi.

Aspetto SQL T-SQL
Proprietร  Standard ANSI/ISO Microsoft
Logica procedurale Limitato Supportato (variabili, cicli)
Gestione degli errori Minimo TRYโ€ฆCATCH supportato
Uso primario DB generici SQL Server

Esempio:

DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
    PRINT @count;
    SET @count -= 1;
END;

2) Spiega i diversi tipi di join in T-SQL con esempi.

I join in T-SQL combinano righe di due o piรน tabelle in base alle colonne correlate. Comprendere i loro tipi รจ fondamentale per le query sui dati relazionali.

Tipo di unione Descrizione Esempio di sintassi
INNER JOIN Restituisce solo le righe corrispondenti SELECT * FROM A INNER JOIN B ON A.id = B.id;
LEFT JOIN Tutto da sinistra + corrispondenze da destra SELECT * FROM A LEFT JOIN B ON A.id = B.id;
GIUSTO UNISCITI Tutto da destra + corrispondenze da sinistra SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
ISCRIZIONE COMPLETA Combina SINISTRA + DESTRA SELECT * FROM A FULL JOIN B ON A.id = B.id;
CROSS UNISCI prodotto cartesiano SELECT * FROM A CROSS JOIN B;

Esempio pratico: accoppiamento Orders e Customers per scoprire quali clienti hanno effettuato ordini utilizzando INNER JOIN.


3) Cosa sono le Common Table Expressions (CTE) e quali sono i loro vantaggi?

Un'espressione di tabella comune (CTE) fornisce un set di risultati denominato temporaneo a cui รจ possibile fare riferimento all'interno di un SELECT, INSERT, UPDATE, o DELETE istruzione. Migliora la leggibilitร  e semplifica le query ricorsive.

vantaggi:

  • Migliora la chiarezza e la manutenzione delle query.
  • Abilita la ricorsione (per dati gerarchici come gli organigrammi).
  • Aiuta a evitare sottoquery ripetute.
  • Aumenta la modularitร  negli script di grandi dimensioni.

Esempio:

WITH EmployeeCTE AS (
    SELECT EmpID, EmpName, ManagerID
    FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;

4) In che modo le tabelle temporanee e le variabili di tabella differiscono in T-SQL?

Entrambi vengono utilizzati per memorizzare risultati intermedi, ma il loro comportamento e la loro portata differiscono notevolmente.

Caratteristica Tabella temporanea (#Temp) Variabile di tabella (@TableVar)
Immagazzinato TempDB Memoria (con utilizzo limitato di TempDB)
Ambito transazionale Segue le transazioni Indipendente dalle transazioni
Indici Supporto Limitato
Cookie di prestazione Meglio per grandi set di dati Meglio per piccoli set di dati

Esempio:

DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50));
INSERT INTO @TableVar VALUES (1, 'Alice');

Utilizzare tabelle temporanee quando si lavora con set di dati di grandi dimensioni o quando sono necessari indici.


5) Spiegare il concetto di transazioni in T-SQL e il loro ciclo di vita.

Una transazione in T-SQL garantisce che una sequenza di operazioni venga eseguita come un'unica unitร  logica. Il ciclo di vita include INIZIA LA TRANSAZIONE, COMMETTEREe RITORNO.

Stage Descrizione
INIZIA LA TRANSAZIONE Avvia la transazione
TRANSAZIONE COMMITTA Salva tutte le modifiche in modo permanente
TRANSAZIONE DI ROLLBACK Annulla tutte le operazioni dall'ultimo BEGIN

Esempio:

BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2;
COMMIT TRANSACTION;

Se si verifica un errore a metร  strada, ROLLBACK mantiene l'integritร  dei dati.


6) Qual รจ la differenza tra i comandi DELETE, TRUNCATE e DROP?

Comando Funzione Rollback Influenza la struttura Velocitร 
DELETE Rimuove righe specifiche Si Non Piรน lentamente
TRONCARE Rimuove tutte le righe No (di solito) Non Connessione
GOCCIA Elimina l'intera tabella Non Si Piรน veloce

Esempio:

DELETE FROM Employees WHERE Department = 'HR';
TRUNCATE TABLE TempData;
DROP TABLE OldLogs;

Usa il DELETE per la rimozione selettiva, TRUNCATE per la compensazione e DROP per rimuovere completamente il tavolo.


7) Come funziona la gestione degli errori in T-SQL?

T-SQL fornisce una gestione strutturata degli errori attraverso TRY...CATCH blocco, consentendo agli sviluppatori di gestire con eleganza gli errori di runtime.

Esempio:

BEGIN TRY
    INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
    PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;

Questo approccio isola l'operazione difettosa e impedisce che la transazione comprometta l'integritร  dei dati. Gli sviluppatori possono anche accedere a funzioni di sistema come ERROR_NUMBER() or ERROR_SEVERITY() per la diagnostica.


8) Quali sono i diversi modi per ottimizzare le prestazioni delle query T-SQL?

L'ottimizzazione implica la messa a punto delle strategie di progettazione, indicizzazione ed esecuzione di SQL.

Tecniche chiave:

  1. Usa il indicizzazione corretta sulle colonne consultate di frequente.
  2. Evitare SELECT * โ€” specificare esplicitamente le colonne.
  3. Usa il operazioni basate su insiemi invece dei cursori.
  4. Analizzare i piani di esecuzione utilizzando SQL Server Management Studio.
  5. Usa il JOIN in modo efficiente con le opportune condizioni ON.
  6. Riduce sottoquery annidate; preferire CTE o tabelle temporanee.

L'ottimizzazione delle prestazioni in T-SQL include anche il monitoraggio delle statistiche di esecuzione delle query utilizzando SET STATISTICS IO ON.


9) Cosa sono le funzioni delle finestre e quando รจ opportuno utilizzarle?

Le funzioni finestra eseguono calcoli su un insieme di righe correlate alla riga corrente, senza comprimerle in un singolo risultato. Sono utili per classificazioni, totali parziali e medie mobili.

Esempio:

SELECT
    EmployeeID,
    Salary,
    RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;

Le funzioni comuni includono RANK(), ROW_NUMBER(), DENSE_RANK()e SUM() OVER().

Sono fondamentali per i carichi di lavoro analitici in cui sono necessari sia dati aggregati sia dati a livello di riga.


10) Spiega la differenza tra indici clusterizzati e non clusterizzati.

Caratteristica Clustered Indice non-Clustered Indice
Archiviazione dei dati   Riorganizza fisicamente la tabella Struttura separata
Numero per tabella Uno multiplo
Cookie di prestazione Piรน veloce per le query di intervallo Piรน veloce per ricerche specifiche
Esempio di utilizzo Chiave primaria Ricerche secondarie

Esempio:

CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID);
CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);

La scelta del tipo di indice corretto influisce direttamente sulla velocitร  di esecuzione delle query e sull'efficienza di archiviazione.


11) Cosa sono le stored procedure in T-SQL e perchรฉ vengono utilizzate?

Una stored procedure รจ una raccolta precompilata di una o piรน istruzioni SQL memorizzate sul server. Migliorano le prestazioni, la sicurezza e la riutilizzabilitร  consentendo di incapsulare la logica ed eseguirla ripetutamente senza ricompilarla. Le stored procedure riducono il traffico di rete e supportano parametri per l'esecuzione dinamica.

Esempio:

CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
    SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;

Vantaggi:

  • Prestazioni migliori grazie alla precompilazione.
  • Maggiore sicurezza tramite esecuzione controllata.
  • Manutenzione del codice e modularizzazione piรน semplici.

12) Spiega la differenza tra una stored procedure e una funzione in T-SQL.

Aspetto Procedura memorizzata Funzione
Tipo di ritorno Puรฒ restituire piรน valori Deve restituire un singolo valore o una tabella
Utilizzare in SELECT Non รจ permesso Permesso
Gestione degli errori TRYโ€ฆCATCH supportato Limitato
Eseguito tramite EXEC Utilizzato in linea con SQL
Controllo delle transazioni Supporto Non supportato

Esempio:

  • Procedura: EXEC GetEmployeeDetails 'HR';
  • Funzionalitร : SELECT dbo.GetSalary(101);

Le funzioni sono ideali per i calcoli; le procedure sono piรน adatte alla logica aziendale e alla manipolazione dei dati.


13) Cos'รจ un trigger in T-SQL e quali sono i suoi tipi?

Un trigger รจ una stored procedure speciale che viene eseguita automaticamente in risposta a determinati eventi (INSERT, UPDATE, DELETE) su una tabella o una vista. I trigger vengono utilizzati per applicare regole aziendali, verificare le modifiche o mantenere l'integritร  referenziale.

Tipo Descrizione
DOPO il grilletto Si attiva dopo il completamento dell'evento
INVECE DI Trigger Viene eseguito al posto dell'evento scatenante

Esempio:

CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    PRINT 'New employee record added!';
END;

Evita di usare eccessivamente i trigger: possono influire sulle prestazioni e complicare il debug.


14) Come si gestiscono i valori NULL in T-SQL?

NULL rappresenta dati mancanti o sconosciuti. T-SQL fornisce diverse funzioni per gestirli in modo efficace:

  • ISNULL(expression, replacement) โ†’ sostituisce NULL con un valore predefinito.
  • COALESCE(expression1, expression2, ...) โ†’ restituisce il primo valore non NULL.
  • NULLIF(expression1, expression2) โ†’ restituisce NULL se le espressioni sono uguali.

Esempio:

SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;

pratica migliore: tenere sempre conto dei valori NULL nelle unioni e nelle condizioni per evitare risultati inaspettati.


15) Cosa sono i cursori in T-SQL e quando รจ meglio evitarli?

Un cursore consente l'elaborazione riga per riga dei risultati delle query, utile per logiche complesse in cui le operazioni basate su set sono insufficienti. Tuttavia, i cursori sono rallentare e ricco di risorse rispetto alle alternative basate su set.

Esempio:

DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor;
-- process
CLOSE emp_cursor;
DEALLOCATE emp_cursor;

svantaggi:

  • Aumento dell'utilizzo della memoria.
  • Scarsa scalabilitร .
  • Prestazioni ridotte.

Alternativa: Ogni volta che รจ possibile, utilizzare join di tabelle, sottoquery o funzioni di finestra.


16) Spiega l'istruzione MERGE e i suoi casi d'uso.

Migliori MERGE dichiarazione esegue INSERT, AGGIORNAMENTOe DELETE operazioni in un unico comando: ideale per sincronizzare due tabelle.

Esempio di sintassi:

MERGE INTO Target AS T
USING Source AS S
ON T.ID = S.ID
WHEN MATCHED THEN UPDATE SET T.Name = S.Name
WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Name) VALUES (S.ID, S.Name)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

Casi d'uso:

  • Data warehousing (sincronizzazione staging e tabelle di destinazione).
  • Caricamento dati incrementale.
  • Gestione di tabelle di controllo o di dimensione.

17) Quali sono i diversi tipi di funzioni definite dall'utente (UDF) in T-SQL?

Tipo Descrizione Esempio
Scalare Restituisce un singolo valore CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
Tabella in linea con valori Restituisce una tabella tramite singolo SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
Tabella con valori multipli Restituisce una tabella dopo piรน istruzioni Utile per la logica complessa

Le funzioni promuovono il riutilizzo del codice e migliorano la progettazione modulare delle query.

Dovrebbero essere deterministici (restituire lo stesso risultato per lo stesso input) ove possibile per ottimizzare le prestazioni.


18) Che cos'รจ la normalizzazione e quali sono i suoi vantaggi e svantaggi?

La normalizzazione รจ il processo di organizzazione dei dati in un database per ridurre al minimo la ridondanza e migliorarne l'integritร . Implica la suddivisione delle tabelle in entitร  piรน piccole e correlate.

Forma normale Regola Esempio
1NF Eliminare i gruppi ripetuti Dividi i dati separati da virgole
2NF Rimuovi le dipendenze parziali Garantire la piena dipendenza dalla chiave primaria
3NF Rimuovere le dipendenze transitive Sposta gli attributi derivati

vantaggi:

  • Riduce la ridondanza.
  • Garantisce la coerenza dei dati.
  • Semplifica la manutenzione.

svantaggi:

  • Giunzioni complesse.
  • Potenziali compromessi in termini di prestazioni per le query analitiche.

19) Quali sono i diversi tipi di vincoli in T-SQL?

I vincoli impongono regole sull'integritร  dei dati all'interno di una tabella.

costrizione Missione Esempio
CHIAVE PRIMARIA Identifica in modo univoco ogni riga PRIMARY KEY (EmpID)
CHIAVE ESTERA Collega due tabelle FOREIGN KEY (DeptID)
UNICO Garantisce valori di colonna univoci UNIQUE (Email)
CONTROLLO Convalida l'intervallo di dati CHECK (Age >= 18)
PREDEFINITO Fornisce valori predefiniti DEFAULT GETDATE()

I vincoli garantiscono accuratezza e affidabilitร , riducendo la necessitร  di una convalida estesa a livello di applicazione.


20) Come si gestiscono i permessi e la sicurezza in T-SQL?

T-SQL gestisce la sicurezza del database tramite accessi, utenti, ruoli e permessi.

Le autorizzazioni possono essere concesse o revocate a livello di oggetto o di schema.

Esempio:

CREATE LOGIN John WITH PASSWORD = 'Strong@123';
CREATE USER John FOR LOGIN John;
GRANT SELECT, INSERT ON Employees TO John;

migliori pratiche:

  • Usa il ruoli invece di autorizzazioni utente dirette.
  • Evitare di utilizzare sa o account di sistema per le applicazioni.
  • Controllare regolarmente le autorizzazioni con sys.database_permissions.

Una corretta gestione delle autorizzazioni garantisce il principio del privilegio minimo e la conformitร  alle policy di sicurezza.


21) Quali sono i diversi livelli di isolamento delle transazioni in T-SQL?

I livelli di isolamento delle transazioni determinano il modo in cui una transazione รจ isolata dalle altre: bilanciamento coerenza con concorrenzaSQL Server supporta quanto segue:

Livello di isolamento Descrizione Lettura sporca Lettura non ripetibile Lettura fantasma
LEGGERE NON CONSIGLIATO Legge i dati non impegnati Si Si Si
LEGGI IMPEGNATO Predefinito; i blocchi impediscono letture sporche Non Si Si
LETTURA RIPETIBILE Impedisce la modifica dei dati fino al commit Non Non Si
SERIALIZZABILE Isolamento completo; bloccaggio piรน elevato Non Non Non
ISTANTANEA Utilizza il controllo delle versioni, non il blocco Non Non Non

Esempio:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- your code
COMMIT;

Usa il ISTANTANEA per sistemi ad alta concorrenza per ridurre al minimo i blocchi senza sacrificare la coerenza.


22) Cos'รจ un deadlock in SQL Server e come รจ possibile prevenirlo?

A punto morto Si verifica quando due transazioni mantengono blocchi reciprocamente necessari, determinando uno stallo. SQL Server rileva e termina automaticamente una transazione come vittima dello stallo.

Scenario di esempio:

  • La transazione A blocca la Tabella 1 e poi attende la Tabella 2.
  • La transazione B blocca la Tabella 2 e poi attende la Tabella 1.

Tecniche di prevenzione:

  1. Accedi alle risorse nello stesso ordine.
  2. Mantenere le transazioni brevi.
  3. Utilizzare livelli di isolamento adeguati.
  4. Evitare l'interazione dell'utente all'interno delle transazioni.

Utilizzare SQL Profiler o Extended Events per tracciare i deadlock in tempo reale.


23) Spiega la differenza tra controllo della concorrenza pessimistico e ottimistico.

Tipo Descrizione Meccanismo di bloccaggio Usa caso
pessimistico Blocca i dati durante la transazione Bloccaggio pesante Ambienti ad alto conflitto
Ottimista Utilizza il controllo delle versioni delle righe, controlla prima del commit Bloccaggio minimo Carichi di lavoro con elevata lettura e basso conflitto

Esempio:

  • Pessimista: predefinito READ COMMITTED bloccaggio.
  • Ottimista: SNAPSHOT isolamento con controllo delle versioni delle righe.

La concorrenza ottimistica migliora le prestazioni dei sistemi con grandi operazioni di lettura e aggiornamenti poco frequenti.


24) Come รจ possibile analizzare e ottimizzare una query T-SQL lenta?

  1. Controllare il piano di esecuzione: Identifica scansioni, indici mancanti e operazioni costose.
  2. Utilizzare SET STATISTICS IO/TIME: Analizza l'utilizzo di I/O e CPU.
  3. Evita cursori e loop: Sostituisci con operazioni basate su insiemi.
  4. Ottimizzazione dell'indice: Aggiungere o riorganizzare gli indici frammentati.
  5. Sniffing dei parametri: Usa il OPTION (RECOMPILE) per generare nuovi piani.

Esempio:

SET STATISTICS TIME ON;
SELECT * FROM Orders WHERE CustomerID = 123;

Monitoraggio regolare delle query lente con Viste di gestione dinamica (DMV) come sys.dm_exec_query_stats รจ una buona pratica.


25) Che cos'รจ Dynamic SQL e quali sono i suoi vantaggi e rischi?

Il SQL dinamico consente di creare istruzioni SQL in modo dinamico durante l'esecuzione utilizzando variabili.

Esempio:

DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + '''';
EXEC(@sql);

vantaggi:

  • Flessibilitร  per nomi di tabelle variabili o filtri.
  • Riutilizzabile per piรน schemi.

svantaggi:

  • Vulnerabile a SQL Injection se non parametrizzato.
  • Piรน difficile da correggere e manutenere.

Usa sempre sp_executesql con parametri di sicurezza.


26) Cosa sono gli oggetti temporanei in T-SQL e in che cosa differiscono?

Gli oggetti temporanei vengono memorizzati in TempDB e aiutare a gestire i dati intermedi.

Tipo di oggetto Obbiettivo Esempio
Tabella temporanea locale Specifico della sessione CREATE TABLE #TempTable
Tabella temporanea globale Visibile a tutte le sessioni CREATE TABLE ##TempGlobal
Variabile di tabella Specifico per lotto DECLARE @Temp TABLE (...)

migliori pratiche:

  • Preferire le variabili di tabella per set di dati piรน piccoli.
  • Utilizzare tabelle temporanee locali per dati di grandi dimensioni con esigenze di indicizzazione.
  • Eliminare esplicitamente le tabelle temporanee per liberare piรน rapidamente le risorse.

27) Come si utilizzano le funzioni di partizionamento delle finestre in T-SQL?

Il partizionamento consente di applicare funzioni finestra a sottoinsiemi specifici di dati.

Esempio:

SELECT
    Department,
    EmpName,
    Salary,
    RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;

Vantaggi:

  • Calcola in modo efficiente classifiche, totali e medie per gruppo.
  • Elimina la necessitร  di auto-join o sottoquery.

Casi d'uso: Fasce salariali, classifiche di vendita e analisi delle tendenze.


28) Qual รจ la differenza tra UNION e UNION ALL in T-SQL?

Clausola duplicati Cookie di prestazione Usa caso
UNION Rimuove i duplicati Piรน lento (usa sort/distinct) Combinazione pulita dei set di risultati
UNIONE TUTTI Mantiene i duplicati Faster Aggregazione o migrazione dei dati

Esempio:

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

Preferire UNION ALL quando i duplicati sono accettabili e le prestazioni sono importanti.


29) Come si lavora con i dati JSON in T-SQL?

SQL Server supporta funzioni JSON native per l'analisi e la generazione di dati JSON.

Esempio:

DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;

Funzioni principali:

  • JSON_VALUE() โ†’ Estrae valori scalari.
  • JSON_QUERY() โ†’ Estrae oggetti/array.
  • OPENJSON() โ†’ Analizza JSON in righe.
  • FOR JSON โ†’ Converte i risultati della query in formato JSON.

Utile per API, sistemi ibridi e integrazioni NoSQL.


30) Come รจ possibile gestire e ottimizzare TempDB in SQL Server?

TempDB รจ un database di sistema fondamentale per l'archiviazione temporanea e il controllo delle versioni. Una cattiva gestione puรฒ causare gravi problemi di prestazioni.

Tecniche di ottimizzazione:

  1. Posiziona TempDB su un dispositivo di archiviazione veloce (SSD).
  2. Predimensionare i file di dati e di registro.
  3. Utilizzare piรน file di dati (1 per core della CPU fino a 8).
  4. Monitorare con sys.dm_db_file_space_usage.
  5. Pulire regolarmente gli oggetti temporanei.

Interrogazione di esempio:

SELECT * FROM sys.dm_db_file_space_usage;

La gestione proattiva di TempDB evita conflitti nelle pagine di allocazione e migliora la produttivitร  complessiva del database.


31) Cosa sono i suggerimenti per le query in T-SQL e quando dovrebbero essere utilizzati?

I suggerimenti per le query indicano all'ottimizzatore di SQL Server di modificare il suo normale piano di esecuzione.

Dovrebbero essere usati con parsimonia, solo quando si comprende appieno il contesto di distribuzione ed esecuzione dei dati.

Esempio:

SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;

Suggerimenti comuni:

  • NOLOCK: Legge senza blocchi (puรฒ leggere dati non confermati).
  • FORCESEEK: Forza la ricerca dell'indice anzichรฉ la scansione.
  • OPTIMIZE FOR: Valori dei parametri guida per la generazione del piano.
  • RECOMPILE: Forza la ricompilazione per ogni esecuzione.

Attenzione: L'uso eccessivo di suggerimenti puรฒ compromettere le prestazioni con l'aumentare dei dati o con il cambiamento dei pattern. Utilizzateli solo quando il piano dell'ottimizzatore รจ dimostrabilmente inefficiente.


32) Spiegare il concetto di memorizzazione nella cache del piano di esecuzione in SQL Server.

SQL Server memorizza nella cache i piani di esecuzione per evitare la ricompilazione delle query ricorrenti.

Quando la stessa query viene eseguita nuovamente con la stessa struttura, riutilizza il piano memorizzato nella cache, migliorando le prestazioni.

Esempio:

EXEC GetCustomerOrders @CustomerID = 101;

Vantaggi:

  • Riduce il sovraccarico della CPU.
  • Migliora la coerenza nei tempi di risposta.

Problemi di:

  • Sniffing dei parametri puรฒ causare piani inefficienti.
  • Il sovraccarico della cache del piano potrebbe consumare memoria.

mitigazione: Usa il OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN dove i parametri variano notevolmente.


33) Che cos'รจ lo sniffing dei parametri e come puรฒ influire sulle prestazioni?

Lo sniffing dei parametri si verifica quando SQL Server utilizza i valori dei parametri della prima esecuzione di una query per generare un piano che viene poi riutilizzato, anche se non รจ ottimale per le esecuzioni successive.

Scenario di esempio:

  • Prima esecuzione: piccolo set di dati โ†’ piano di ricerca dell'indice.
  • Esecuzione successiva: ampio set di dati โ†’ stesso piano riutilizzato, ma lento.

Soluzioni:

  1. Usa il OPTION (RECOMPILE) per generare nuovi piani.
  2. Utilizzare variabili locali per mascherare i valori dei parametri.
  3. Usa il OPTIMIZE FOR or OPTIMIZE FOR UNKNOWN.

Lo sniffing dei parametri รจ uno dei principali responsabili reali delle prestazioni imprevedibili in T-SQL.


34) Come si monitorano e si analizzano le prestazioni delle query in SQL Server?

รˆ possibile utilizzare diversi strumenti e DMV per profilare e ottimizzare le prestazioni:

  • Piani di esecuzione: Ctrl + M in SSMS o sys.dm_exec_query_plan.
  • Motorizzazione civile:

    • sys.dm_exec_query_stats โ€“ CPU e durata.
    • sys.dm_exec_sql_text โ€“ Testo SQL.
    • sys.dm_exec_requests โ€“ Query attive.
  • Monitoraggio delle prestazioni ed eventi estesi per il monitoraggio a lungo termine.

Esempio:

SELECT TOP 5
    total_worker_time / execution_count AS AvgCPU,
    total_elapsed_time / execution_count AS AvgTime,
    SUBSTRING(qt.text, 1, 100) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgTime DESC;

35) Spiega il ruolo delle statistiche nell'ottimizzazione delle query.

Le statistiche descrivono la distribuzione dei dati (ad esempio, valori distinti, densitร , istogramma) che l'ottimizzatore utilizza per stimare la cardinalitร .

Se le statistiche sono obsolete, SQL Server potrebbe scegliere piani scadenti.

Comandi chiave:

  • UPDATE STATISTICS Employees;
  • sp_updatestats;
  • Impostazione di aggiornamento automatico: abilitata per impostazione predefinita.

migliori pratiche:

  • mantenere AUTO_UPDATE_STATISTICS abilitato.
  • Per tabelle di grandi dimensioni, pianificare aggiornamenti manuali.
  • Usa il FULLSCAN per indici critici.

Le statistiche obsolete sono un killer silenzioso delle prestazioni.


36) Qual รจ la differenza tra una ricerca di indice e una scansione di indice?

Funzionamento Descrizione Cookie di prestazione Usa caso
Ricerca indice Passa direttamente alle righe corrispondenti Connessione Query altamente selettive
Scansione indice Legge tutte le voci dell'indice in sequenza Piรน lentamente Query a bassa selettivitร 

Esempio:

SELECT * FROM Orders WHERE OrderID = 123; -- Seek
SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan

Suggerimento per l'ottimizzazione: Creare indici filtrati o di copertura per trasformare le scansioni in ricerche.


37) Spiega le tabelle partizionate e i loro vantaggi.

Il partizionamento divide una tabella di grandi dimensioni in parti piรน piccole e gestibili (partizioni), spesso in base a una colonna di intervallo (ad esempio la data).

Vantaggi:

  • Gestione dati piรน rapida (caricamento/scaricamento per partizione).
  • Prestazioni di query migliorate su set di dati di grandi dimensioni.
  • Elaborazione parallela per scansioni partizionate.

Esempio:

CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');

Caso d'uso: Data warehouse che gestiscono miliardi di righe in cui le vecchie partizioni possono essere archiviate in modo efficiente.


38) Cosa sono le CTE ricorsive e quali sono i loro limiti?

A espressione di tabella comune ricorsiva (CTE) fa riferimento a se stesso, in genere per dati gerarchici come organigrammi o strutture ad albero.

Esempio:

WITH EmployeeCTE AS (
    SELECT EmpID, ManagerID, EmpName FROM Employees WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.EmpID, e.ManagerID, e.EmpName
    FROM Employees e
    INNER JOIN EmployeeCTE c ON e.ManagerID = c.EmpID
)
SELECT * FROM EmployeeCTE;

limitazioni:

  • Limite di ricorsione predefinito = 100 livelli.
  • Puรฒ causare problemi di prestazioni se la profonditร  di ricorsione รจ elevata.
  • Usa il OPTION (MAXRECURSION n) per regolare il limite.

39) In che modo SQL Server gestisce internamente gli errori nelle transazioni?

Quando si verifica un errore all'interno di una transazione:

  • Se รจ grave (livello > 20), la connessione termina immediatamente.
  • If non grave, puรฒ essere catturato con TRY...CATCH.

Esempio:

BEGIN TRY
    BEGIN TRANSACTION;
    UPDATE Accounts SET Balance -= 500 WHERE ID = 1;
    INSERT INTO AuditLog VALUES ('Debit');
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
    PRINT ERROR_MESSAGE();
END CATCH;

migliori Pratica: Per la resilienza agli errori, racchiudere sempre DML in TRYโ€ฆCATCH.


40) Quali sono alcune tecniche avanzate di ottimizzazione delle prestazioni T-SQL?

  1. Evitare UDF scalari in SELECT โ€” le funzioni in linea sono piรน veloci.
  2. Utilizzare indici filtrati per ridurre le dimensioni dell'indice.
  3. Sfrutta OLTP in memoria (Hekaton) per sistemi ad alta concorrenza.
  4. Esecuzione in modalitร  batch sugli indici columnstore per l'analisi.
  5. Eliminare le conversioni implicite abbinando i tipi di dati.
  6. Utilizzare l'archivio query per confrontare i piani storici.

Esempio per rilevare conversioni implicite:

SELECT * FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE CAST(query_plan AS NVARCHAR(MAX)) LIKE '%CONVERT_IMPLICIT%';

L'ottimizzazione delle prestazioni รจ un processo continuo, non un evento una tantum.


41) Come si possono identificare le query che richiedono piรน risorse in SQL Server?

รˆ possibile identificare le query ad alto costo utilizzando le viste di gestione dinamica (DMV) che registrano le statistiche di esecuzione storiche.

Esempio:

SELECT TOP 10
    total_logical_reads / execution_count AS AvgReads,
    total_worker_time / execution_count AS AvgCPU,
    total_elapsed_time / execution_count AS AvgDuration,
    SUBSTRING(qt.text, 1, 200) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgCPU DESC;

Chiave metrica:

  • AvgCPU: Tempo medio della CPU per esecuzione.
  • AvgReads: Intensitร  I/O.
  • AvgDuration: Latenza di esecuzione.

Questo approccio aiuta gli amministratori di database a isolare le query piรน complesse prima ancora che gli utenti notino un calo delle prestazioni.


42) Come รจ possibile rilevare e correggere gli indici mancanti in SQL Server?

SQL Server tiene traccia automaticamente delle raccomandazioni sugli indici mancanti tramite DMV.

Esempio:

SELECT
    migs.user_seeks AS Seeks,
    mid.statement AS TableName,
    mid.equality_columns,
    mid.inequality_columns,
    mid.included_columns
FROM sys.dm_db_missing_index_details mid
JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
ORDER BY migs.user_seeks DESC;

migliori pratiche:

  • Dare prioritร  agli indici ad alta ricerca.
  • Verificare tramite piani di esecuzione prima della creazione.
  • Evitare l'indicizzazione eccessiva: rallenta le scritture.

43) Qual รจ la differenza tra mirroring del database, replica e log shipping?

Caratteristica Missione Tracciamento in tempo reale della spedizione failover Complessitร 
Mirroring Copia del database ad alta disponibilitร  Si Automatico Medio
replicazione Distribuzione dei dati tra i database Parziale Manuale Alto
Log spedizione Strategia DR basata sul backup Non Manuale Basso

Guida all'uso:

  • Mirroring โ†’ Sistemi ad alta disponibilitร  OLTP.
  • Replicazione โ†’ Reporting distribuito.
  • Log Shipping โ†’ Configurazioni di disaster recovery.

44) Come si risolvono i problemi di blocco in SQL Server?

Il blocco si verifica quando un processo mantiene blocchi di cui un altro processo ha bisogno.

Per identificare i bloccanti:

SELECT
    blocking_session_id AS Blocker,
    session_id AS Blocked,
    wait_type,
    wait_time,
    wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

Soluzioni:

  • Ridurre la durata della transazione.
  • Utilizzare l'isolamento degli snapshot.
  • Ottimizzare le query per ridurre al minimo il blocco.
  • Identificare le transazioni aperte di lunga durata con DBCC OPENTRAN.

45) In che modo Query Store di SQL Server aiuta a ottimizzare le prestazioni?

Query Store acquisisce il testo della query, i piani e le statistiche di runtime, consentendo analisi di regressione del piano.

Aiuta a identificare quando una query diventa improvvisamente lenta a causa di modifiche al piano.

Esempio:

SELECT q.query_id, p.plan_id, rs.avg_duration
FROM sys.query_store_query q
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
ORDER BY rs.avg_duration DESC;

Vantaggi:

  • Confronta i piani storici.
  • Forzare buoni piani.
  • Monitora l'andamento delle prestazioni nel tempo.

46) Come รจ possibile prevenire l'iniezione SQL nelle applicazioni T-SQL?

Difese primarie:

  1. Usa il query parametrizzate via sp_executesql.
  2. Convalidare e sanificare tutti gli input degli utenti.
  3. Evitare la concatenazione SQL dinamica.
  4. impiegare principio del privilegio minimo per gli account del database.

Esempio sicuro:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept';
EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';

Anche se l'iniezione SQL รจ a livello di applicazione, Gli amministratori di database devono controllare le procedure archiviate e i registri per l'esecuzione non parametrizzata.


47) Come si utilizzano gli eventi estesi per un monitoraggio approfondito delle prestazioni?

Extended Events (XEvents) รจ un framework di monitoraggio delle prestazioni leggero, un'alternativa moderna a SQL Trace.

Esempio:

CREATE EVENT SESSION TrackQueries
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(WHERE duration > 1000)
ADD TARGET package0.event_file (SET filename = 'C:\Temp\QueryMonitor.xel');
ALTER EVENT SESSION TrackQueries ON SERVER STATE = START;

Casi d'uso:

  • Monitora le query ad alta richiesta di CPU.
  • Catturare situazioni di stallo o indici mancanti.
  • Profilare le istruzioni di lunga durata in produzione con un overhead minimo.

48) Cosa sono gli indici filtrati e quando dovrebbero essere utilizzati?

Un indice filtrato indicizza solo un sottoinsieme di righe che soddisfano una condizione di filtro, migliorando le prestazioni e riducendo lo spazio di archiviazione.

Esempio:

CREATE INDEX IX_ActiveEmployees
ON Employees (Department)
WHERE Status = 'Active';

Vantaggi:

  • Dimensioni dell'indice piรน piccole.
  • Manutenzione piรน rapida.
  • Ottimizzato per query selettive.

migliori Per: Colonne con distribuzione dei dati distorta (ad esempio, record attivi rispetto a quelli inattivi).


49) Come si migrano i dati in modo sicuro tra ambienti SQL Server?

La migrazione sicura dei dati implica la pianificazione di coerenza, tempi di inattivitร  e rollback.

migliori pratiche:

  1. Usa il replica transazionale or modificare l'acquisizione dei dati (CDC) per la sincronizzazione in tempo reale.
  2. Disattiva temporaneamente vincoli e trigger.
  3. Usa il BCP or SSIS per il trasferimento di dati in grandi quantitร .
  4. Convalida il conteggio delle righe e i checksum.
  5. Eseguire sempre controlli di integritร  post-migrazione (DBCC CHECKDB).

Esempio:

bcp Database.dbo.Table out TableData.dat -n -S Server -T

Il test degli script di migrazione in fase di staging non รจ negoziabile.


50) Come si identificano e risolvono i problemi relativi alle query sensibili ai parametri (PSQ)?

Le query sensibili ai parametri vengono eseguite in modo incoerente in base ai valori dei parametri, una sfida frequente nel mondo reale.

rilevamento: Usa il QueryStore or sys.dm_exec_query_stats per identificare piรน piani per una query.

Strategie di correzione:

  1. Usa il OPZIONE (RICOMPILA) per ogni esecuzione.
  2. Usa il OTTIMIZZA PER SCONOSCIUTO per creare un piano generico.
  3. Crea guide di pianificazione per imporre percorsi di esecuzione ottimali.
  4. Usa il suggerimenti per la query solo se necessario.

Le problematiche legate ai parametri richiedono un equilibrio tra stabilitร  del piano e prevedibilitร  delle prestazioni.

๐Ÿ” Le migliori domande per i colloqui T-SQL con scenari reali e risposte strategiche

1) Qual รจ la differenza tra INNER JOIN e LEFT JOIN in T-SQL?

Requisiti richiesti al candidato: L'intervistatore vuole valutare la tua comprensione delle operazioni di join e del modo in cui vengono gestite le relazioni tra i dati nelle query SQL.

Esempio di risposta: An INNER JOIN restituisce solo le righe che hanno valori corrispondenti in entrambe le tabelle, mentre a LEFT JOIN Restituisce tutte le righe della tabella di sinistra, insieme alle righe corrispondenti della tabella di destra. In assenza di corrispondenze, vengono restituiti valori NULL per le colonne della tabella di destra. Questa distinzione รจ fondamentale quando si lavora con relazioni parziali o facoltative nei database.


2) Come si identificano e si rimuovono i record duplicati da una tabella in T-SQL?

Requisiti richiesti al candidato: L'intervistatore vuole verificare la tua capacitร  di utilizzare le funzioni finestra e le CTE per gestire i problemi di qualitร  dei dati.

Esempio di risposta: Vorrei utilizzare una Common Table Expression (CTE) combinata con ROW_NUMBER() funzione per identificare i duplicati. Ad esempio:

WITH CTE AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn
  FROM MyTable
)
DELETE FROM CTE WHERE rn > 1;

Questo approccio aiuta a rimuovere i duplicati mantenendo un record univoco per ogni gruppo.


3) Puoi spiegare cos'รจ una CTE (Common Table Expression) e quando la si usa?

Requisiti richiesti al candidato: L'intervistatore verificherร  la tua conoscenza della strutturazione delle query e dei set di risultati temporanei.

Esempio di risposta: Una CTE รจ un set di risultati temporaneo definito nell'ambito di esecuzione di una singola query. รˆ utile per semplificare join e sottoquery complesse, migliorare la leggibilitร  e rendere possibili query ricorsive. Nel mio ruolo precedente, ho utilizzato frequentemente le CTE per scomporre la logica di aggregazione multi-step in componenti piรน gestibili.


4) Come si gestisce l'ottimizzazione delle prestazioni nelle query T-SQL?

Requisiti richiesti al candidato: L'intervistatore desidera valutare la tua esperienza nell'ottimizzazione delle query e nella risoluzione dei problemi di prestazioni.

Esempio di risposta: Inizio esaminando il piano di esecuzione per identificare operazioni lente come scansioni di tabelle o join costosi. Poi verifico la presenza di indici mancanti, sottoquery ridondanti o join inefficienti. Analizzo anche le statistiche e utilizzo strategie di indicizzazione, come la copertura degli indici o gli indici filtrati, per migliorare le prestazioni. Infine, rivedo la logica delle query per assicurarmi che sfrutti operazioni basate su set anzichรฉ l'elaborazione riga per riga.


5) Descrivi un caso in cui hai dovuto eseguire il debug di una query lenta in produzione. Quali passaggi hai seguito?

Requisiti richiesti al candidato: Questa domanda comportamentale valuta le tue capacitร  di risoluzione dei problemi e di comunicazione nel mondo reale.

Esempio di risposta: In una posizione precedente, l'esecuzione di una query di report richiedeva piรน di 20 minuti. Ho analizzato il piano di esecuzione e ho scoperto che in uno dei join mancava un indice su una colonna chiave esterna. Dopo aver creato l'indice e aggiornato le statistiche, il tempo di esecuzione della query รจ sceso a meno di 30 secondi. Ho anche documentato la correzione e l'ho condivisa con il team per prevenire problemi simili in futuro.


6) Cosa sono le tabelle temporanee e le variabili di tabella e in che cosa differiscono?

Requisiti richiesti al candidato: L'intervistatore sta verificando la tua comprensione delle opzioni di archiviazione temporanea dei dati in T-SQL.

Esempio di risposta: Tabelle temporanee (#TempTable) vengono create nel database tempdb e supportano indici, vincoli e statistiche. Le variabili di tabella (@TableVar) sono archiviate in memoria e hanno un supporto statistico limitato, il che le rende adatte a dataset piรน piccoli. Le tabelle temporanee sono piรน adatte a dataset di grandi dimensioni o complessi, mentre le variabili di tabella sono piรน efficienti per dati di piccole dimensioni e di breve durata.


7) Come gestiresti la gestione degli errori e le transazioni in T-SQL?

Requisiti richiesti al candidato: L'intervistatore sta verificando la tua comprensione dell'integritร  transazionale e della gestione delle eccezioni.

Esempio di risposta: Io uso BEGIN TRANSACTION, COMMITe ROLLBACK dichiarazioni per garantire la coerenza dei dati. Includo anche TRY...CATCH blocchi per gestire gli errori in modo elegante. Ad esempio:

BEGIN TRY
  BEGIN TRANSACTION
    -- SQL operations here
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
  PRINT ERROR_MESSAGE()
END CATCH

Questo approccio impedisce aggiornamenti parziali dei dati quando si verificano errori.


8) Come si usano le funzioni finestra in T-SQL? Puoi fare un esempio?

Requisiti richiesti al candidato: L'intervistatore vuole valutare la tua competenza nel rispondere a domande analitiche avanzate.

Esempio di risposta: Le funzioni finestra consentono calcoli su insiemi di righe correlati alla riga corrente senza comprimere i dati. Ad esempio:

SELECT 
  EmployeeID, 
  Salary,
  RANK() OVER (ORDER BY Salary DESC) AS SalaryRank
FROM Employees;

In questo modo, ai dipendenti vengono assegnati dei numeri di classifica in base allo stipendio, semplificando l'analisi delle tendenze delle prestazioni.


9) Raccontami di un progetto T-SQL complesso su cui hai lavorato e di come hai affrontato le sfide che ne sono derivate.

Requisiti richiesti al candidato: L'intervistatore cerca esperienza approfondita, capacitร  di problem solving e capacitร  di lavoro di squadra.

Esempio di risposta: Nel mio ultimo ruolo, ho creato una pipeline ETL per data warehouse utilizzando stored procedure T-SQL. La sfida era gestire grandi volumi di dati in modo efficiente. Ho ottimizzato le query con tabelle partizionate, caricamenti incrementali ed elaborazione batch. Ho anche collaborato con il team di BI per garantire la coerenza nella progettazione degli schemi e migliorare la velocitร  di reporting di oltre il 40%.


10) Come gestiresti una situazione in cui una stored procedure da te scritta causasse un deadlock nella produzione?

Requisiti richiesti al candidato: L'intervistatore metterร  alla prova la tua capacitร  di gestione delle crisi e la tua consapevolezza tecnica.

Esempio di risposta: Per prima cosa identificherei la situazione di stallo utilizzando SQL Server sys.dm_tran_locks e grafici di deadlock. Quindi, analizzavo l'ordine di accesso alle risorse e riorganizzavo la procedura per acquisire i lock in una sequenza coerente. Nel mio precedente lavoro, ho anche implementato una logica di ripetizione per le transazioni interessate e pianificato un monitoraggio regolare per rilevare tempestivamente pattern simili.

Riassumi questo post con: