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

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:
- Usa il indicizzazione corretta sulle colonne consultate di frequente.
- Evitare
SELECT *โ specificare esplicitamente le colonne. - Usa il operazioni basate su insiemi invece dei cursori.
- Analizzare i piani di esecuzione utilizzando SQL Server Management Studio.
- Usa il JOIN in modo efficiente con le opportune condizioni ON.
- 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
sao 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:
- Accedi alle risorse nello stesso ordine.
- Mantenere le transazioni brevi.
- Utilizzare livelli di isolamento adeguati.
- 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 COMMITTEDbloccaggio. - Ottimista:
SNAPSHOTisolamento 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?
- Controllare il piano di esecuzione: Identifica scansioni, indici mancanti e operazioni costose.
- Utilizzare SET STATISTICS IO/TIME: Analizza l'utilizzo di I/O e CPU.
- Evita cursori e loop: Sostituisci con operazioni basate su insiemi.
- Ottimizzazione dell'indice: Aggiungere o riorganizzare gli indici frammentati.
- 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:
- Posiziona TempDB su un dispositivo di archiviazione veloce (SSD).
- Predimensionare i file di dati e di registro.
- Utilizzare piรน file di dati (1 per core della CPU fino a 8).
- Monitorare con
sys.dm_db_file_space_usage. - 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:
- Usa il
OPTION (RECOMPILE)per generare nuovi piani. - Utilizzare variabili locali per mascherare i valori dei parametri.
- Usa il
OPTIMIZE FORorOPTIMIZE 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 + Min SSMS osys.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_STATISTICSabilitato. - Per tabelle di grandi dimensioni, pianificare aggiornamenti manuali.
- Usa il
FULLSCANper 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?
- Evitare UDF scalari in SELECT โ le funzioni in linea sono piรน veloci.
- Utilizzare indici filtrati per ridurre le dimensioni dell'indice.
- Sfrutta OLTP in memoria (Hekaton) per sistemi ad alta concorrenza.
- Esecuzione in modalitร batch sugli indici columnstore per l'analisi.
- Eliminare le conversioni implicite abbinando i tipi di dati.
- 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:
- Usa il query parametrizzate via
sp_executesql. - Convalidare e sanificare tutti gli input degli utenti.
- Evitare la concatenazione SQL dinamica.
- 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:
- Usa il replica transazionale or modificare l'acquisizione dei dati (CDC) per la sincronizzazione in tempo reale.
- Disattiva temporaneamente vincoli e trigger.
- Usa il BCP or SSIS per il trasferimento di dati in grandi quantitร .
- Convalida il conteggio delle righe e i checksum.
- 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:
- Usa il OPZIONE (RICOMPILA) per ogni esecuzione.
- Usa il OTTIMIZZA PER SCONOSCIUTO per creare un piano generico.
- Crea guide di pianificazione per imporre percorsi di esecuzione ottimali.
- 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.
