Las 50 preguntas y respuestas principales de la entrevista T-SQL (2026)

¿Te estás preparando para una entrevista de T-SQL? Es hora de profundizar en tu comprensión de cómo funcionan realmente las bases de datos internamente. Preguntas de entrevista sobre T-SQLLos reclutadores evalúan no solo la capacidad de recordar la sintaxis, sino también el dominio de la manipulación de datos, la optimización y la estructuración lógica.
Las oportunidades en este sector siguen creciendo a medida que las empresas dependen de información basada en datos. Destacan los candidatos con sólidos conocimientos técnicos, capacidad de análisis y habilidades para resolver problemas reales, tanto recién graduados como profesionales con entre 5 y 10 años de experiencia. Comprender las preguntas y respuestas, tanto a nivel básico como avanzado, ayuda a los líderes de equipo, gerentes y técnicos sénior a identificar a quienes poseen sólidas habilidades en SQL y experiencia fundamental.
Nuestra guía se basa en las perspectivas de más de 65 gerentes de contratación, más de 40 desarrolladores senior y profesionales de datos de diversas industrias, lo que garantiza una cobertura que abarca desde la lógica SQL fundamental hasta las técnicas de optimización avanzadas en las que confían los líderes técnicos de todo el mundo. Leer más ...
👉 Descarga gratuita del PDF: Preguntas y respuestas de entrevista sobre T-SQL
Principales preguntas y respuestas de entrevistas sobre T-SQL
1) ¿Qué es T-SQL y en qué se diferencia del SQL estándar?
Transact-SQL (T-SQL) es Microsoftla extensión propietaria del lenguaje SQL, utilizada principalmente con Microsoft SQL ServerMejora el SQL estándar al introducir características de programación procedimental como variables, condicionales, bucles, manejo de errores y funciones integradas. Mientras que el SQL estándar se centra en la manipulación de datos (SELECT, INSERT, UPDATE, DELETE), T-SQL admite instrucciones de control de flujo (IF…ELSE, WHILE), manejo de transacciones y funciones del sistema que permiten a los desarrolladores escribir scripts complejos.
| Aspecto | SQL | T-SQL |
|---|---|---|
| Propiedad del activo: | Norma ANSI/ISO | Microsoft |
| Lógica procedimental | Limitada | Admitido (variables, bucles) |
| Gestión de errores | Minimo | TRY…CATCH compatible |
| Uso primario | Bases de datos genéricas | SQL Server |
Ejemplo:
DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
PRINT @count;
SET @count -= 1;
END;
2) Explique los diferentes tipos de uniones en T-SQL con ejemplos.
En T-SQL, las combinaciones (JOIN) unen filas de dos o más tablas basándose en columnas relacionadas. Comprender sus tipos es fundamental para las consultas de datos relacionales.
| Tipo de unión | Descripción | Sintaxis de ejemplo |
|---|---|---|
| INNER JOIN | Devuelve solo las filas coincidentes. | SELECT * FROM A INNER JOIN B ON A.id = B.id; |
| LEFT JOIN | Todo de izquierda a derecha + partidos de derecha | SELECT * FROM A LEFT JOIN B ON A.id = B.id; |
| UNIRSE A LA DERECHA | Todo desde la derecha + coincidencias desde la izquierda | SELECT * FROM A RIGHT JOIN B ON A.id = B.id; |
| UNIRSE COMPLETAMENTE | Combina IZQUIERDA + DERECHA | SELECT * FROM A FULL JOIN B ON A.id = B.id; |
| UNIÓN CRUZADA | producto cartesiano | SELECT * FROM A CROSS JOIN B; |
Ejemplo práctico: Integrándose Orders y Customers para averiguar qué clientes han realizado pedidos utilizando INNER JOIN.
3) ¿Qué son las expresiones de tabla comunes (CTE) y cuáles son sus ventajas?
Una expresión de tabla común (CTE) proporciona un conjunto de resultados temporales con nombre al que se puede hacer referencia dentro de una SELECT, INSERT, UPDATE o DELETE Declaración. Mejora la legibilidad y simplifica las consultas recursivas.
Ventajas:
- Mejora la claridad y el mantenimiento de las consultas.
- Habilita la recursión (para datos jerárquicos como organigramas).
- Ayuda a evitar subconsultas repetidas.
- Aumenta la modularidad en scripts grandes.
Ejemplo:
WITH EmployeeCTE AS (
SELECT EmpID, EmpName, ManagerID
FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;
4) ¿En qué se diferencian las tablas temporales y las variables de tabla en T-SQL?
Ambos se utilizan para almacenar resultados intermedios, pero su comportamiento y alcance difieren significativamente.
| Característica | Tabla temporal (#Temp) |
Variable de tabla (@TableVar) |
|---|---|---|
| Guardado en | base de datos temporal | Memoria (con uso limitado de TempDB) |
| Alcance transaccional | Sigue las transacciones | Independientemente de las transacciones |
| Índices | Soportado | Limitada |
| Rendimiento | Mejor para grandes conjuntos de datos | Mejor para conjuntos de datos pequeños |
Ejemplo:
DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50)); INSERT INTO @TableVar VALUES (1, 'Alice');
Utilice tablas temporales cuando trabaje con grandes conjuntos de datos o necesite índices.
5) Explique el concepto de transacciones en T-SQL y su ciclo de vida.
Una transacción en T-SQL garantiza que una secuencia de operaciones se ejecute como una sola unidad lógica. El ciclo de vida incluye INICIO DE LA TRANSACCIÓN, COMETER y RETROCEDER.
| Fase | Descripción |
|---|---|
| INICIO DE LA TRANSACCIÓN | Inicia la transacción |
| TRANSACCIÓN DE COMPROMISO | Guarda todos los cambios de forma permanente. |
| REVERSIÓN DE LA TRANSACCIÓN | Deshace todas las operaciones desde el último BEGIN. |
Ejemplo:
BEGIN TRANSACTION; UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1; UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2; COMMIT TRANSACTION;
Si se produce un error a mitad del proceso, ROLLBACK Mantiene la integridad de los datos.
6) ¿Cuál es la diferencia entre los comandos DELETE, TRUNCATE y DROP?
| Comando | Función | Rollback | Afecta la estructura | Speed (Rapidez) |
|---|---|---|---|---|
| BORRAR | Elimina filas específicas | Sí | No | Más lento |
| TRUNCAR | Elimina todas las filas | No (normalmente) | No | Rápido |
| DROP | Elimina la tabla completa | No | Sí | Empresarial |
Ejemplo:
DELETE FROM Employees WHERE Department = 'HR'; TRUNCATE TABLE TempData; DROP TABLE OldLogs;
Use DELETE para la eliminación selectiva, TRUNCATE para despejar, y DROP para retirar la mesa por completo.
7) ¿Cómo funciona el manejo de errores en T-SQL?
T-SQL proporciona un manejo de errores estructurado a través de TRY...CATCH bloque, lo que permite a los desarrolladores gestionar de forma elegante los errores en tiempo de ejecución.
Ejemplo:
BEGIN TRY
INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;
Este enfoque aísla la operación defectuosa y evita que la transacción corrompa la integridad de los datos. Los desarrolladores también pueden acceder a funciones del sistema como ERROR_NUMBER() or ERROR_SEVERITY() para diagnóstico.
8) ¿Cuáles son las diferentes formas de optimizar el rendimiento de las consultas T-SQL?
La optimización implica el ajuste preciso del diseño, la indexación y las estrategias de ejecución de SQL.
Técnicas clave:
- Use indexación adecuada en las columnas consultadas con frecuencia.
- Evitando
SELECT *— especificar explícitamente las columnas. - Use operaciones basadas en conjuntos en lugar de cursores.
- Analice los planes de ejecución utilizando SQL Server Management Studio.
- Use JOINs eficiente con las condiciones de encendido adecuadas.
- La disminución subconsultas anidadas; prefiero las CTE o las tablas temporales.
La optimización del rendimiento en T-SQL también incluye la monitorización de las estadísticas de ejecución de consultas mediante SET STATISTICS IO ON.
9) ¿Qué son las funciones de ventana y cuándo se deben usar?
Las funciones de ventana realizan cálculos sobre un conjunto de filas relacionadas con la fila actual, sin agruparlas en un único resultado. Son útiles para la clasificación, los totales acumulados y las medias móviles.
Ejemplo:
SELECT
EmployeeID,
Salary,
RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;
Las funciones comunes incluyen RANK(), ROW_NUMBER(), DENSE_RANK() y SUM() OVER().
Son cruciales para cargas de trabajo analíticas donde se necesitan datos tanto agregados como a nivel de fila.
10) Explique la diferencia entre índices agrupados y no agrupados.
| Característica | Clusteríndice de edición | No-Clusteríndice de edición |
|---|---|---|
| Almacenamiento de datos | Reorganiza físicamente la mesa | Estructura separada |
| Número por mesa | Un | Múltiple |
| Rendimiento | Más rápido para consultas de rango | Más rápido para búsquedas específicas |
| Ejemplo de uso | Clave primaria | Búsquedas secundarias |
Ejemplo:
CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID); CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);
Elegir el tipo de índice adecuado afecta directamente a la velocidad de ejecución de las consultas y a la eficiencia del almacenamiento.
11) ¿Qué son los procedimientos almacenados en T-SQL y por qué se utilizan?
Un procedimiento almacenado es una colección precompilada de una o más instrucciones SQL almacenadas en el servidor. Mejoran el rendimiento, la seguridad y la reutilización al permitir encapsular la lógica y ejecutarla repetidamente sin necesidad de recompilarla. Los procedimientos almacenados reducen el tráfico de red y admiten parámetros para la ejecución dinámica.
Ejemplo:
CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;
Beneficios:
- Mejor rendimiento gracias a la precompilación.
- Mayor seguridad mediante la ejecución controlada.
- Mantenimiento y modularización del código más sencillos.
12) Explique la diferencia entre un procedimiento almacenado y una función en T-SQL.
| Aspecto | Procedimiento almacenado | Función |
|---|---|---|
| Tipo de retorno | Puede devolver múltiples valores | Debe devolver un único valor o tabla. |
| Usar en SELECT | No se permiten | Permitido |
| Gestión de errores | TRY…CATCH compatible | Limitada |
| Ejecución | Ejecutado mediante EXEC |
Utilizado en línea con SQL |
| Control de transacciones | Soportado | No se admite |
Ejemplo:
- Procedimiento:
EXEC GetEmployeeDetails 'HR'; - Funcionalidad:
SELECT dbo.GetSalary(101);
Las funciones son ideales para cálculos; los procedimientos son mejores para la lógica empresarial y la manipulación de datos.
13) ¿Qué es un disparador en T-SQL y cuáles son sus tipos?
Un disparador es un procedimiento almacenado especial que se ejecuta automáticamente en respuesta a ciertos eventos (INSERT, UPDATE, DELETE) en una tabla o vista. Los disparadores se utilizan para aplicar reglas de negocio, auditar cambios o mantener la integridad referencial.
| Categoría | Descripción |
|---|---|
| DESPUÉS del disparador | Incendios tras la finalización del evento |
| EN LUGAR DE Gatillo | Se ejecuta en lugar del evento desencadenante |
Ejemplo:
CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
PRINT 'New employee record added!';
END;
Evite abusar de los disparadores; pueden afectar al rendimiento y complicar la depuración.
14) ¿Cómo se manejan los valores NULL en T-SQL?
NULL representa datos faltantes o desconocidos. T-SQL proporciona varias funciones para manejarlo de manera efectiva:
ISNULL(expression, replacement)→ reemplaza NULL con un valor predeterminado.COALESCE(expression1, expression2, ...)→ devuelve el primer valor no nulo.NULLIF(expression1, expression2)→ devuelve NULL si las expresiones son iguales.
Ejemplo:
SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;
Mejores prácticas: Siempre tenga en cuenta los valores NULL en las uniones y condiciones para evitar resultados inesperados.
15) ¿Qué son los cursores en T-SQL y cuándo se deben evitar?
Un cursor permite el procesamiento fila por fila de los resultados de una consulta, lo cual resulta útil para lógica compleja donde las operaciones basadas en conjuntos son insuficientes. Sin embargo, los cursores son lento y pesado en recursos en comparación con las alternativas basadas en conjuntos.
Ejemplo:
DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees; OPEN emp_cursor; FETCH NEXT FROM emp_cursor; -- process CLOSE emp_cursor; DEALLOCATE emp_cursor;
Desventajas:
- Mayor uso de memoria.
- Poca escalabilidad.
- Rendimiento reducido.
alternativa: Utilice combinaciones de tablas, subconsultas o funciones de ventana siempre que sea posible.
16) Explique la instrucción MERGE y sus casos de uso.
El MERGE La declaración realiza INSERT, ACTUALIZAR y BORRAR Operaciones en un solo comando: ideal para sincronizar dos tablas.
Ejemplo de sintaxis:
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;
Casos de uso:
- Almacenamiento de datos (sincronización de tablas de almacenamiento provisional y de destino).
- Carga incremental de datos.
- Mantenimiento de tablas de auditoría o dimensiones.
17) ¿Cuáles son los diferentes tipos de funciones definidas por el usuario (UDF) en T-SQL?
| Categoría | Descripción | Ejemplo |
|---|---|---|
| Escalar | Devuelve un único valor | CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL |
| Tabla en línea con valores | Devuelve una tabla mediante un único SELECT |
RETURN SELECT * FROM Employees WHERE Dept = 'HR' |
| Tabla de valores de múltiples declaraciones | Devuelve una tabla después de varias instrucciones. | Útil para la lógica compleja |
Las funciones fomentan la reutilización del código y mejoran el diseño modular de las consultas.
Siempre que sea posible, deben ser deterministas (devolver el mismo resultado para la misma entrada) para optimizar el rendimiento.
18) ¿Qué es la normalización y cuáles son sus ventajas y desventajas?
La normalización es el proceso de organizar los datos en una base de datos para minimizar la redundancia y mejorar la integridad. Consiste en dividir las tablas en entidades más pequeñas y relacionadas.
| Forma normal | Regla | Ejemplo |
|---|---|---|
| 1NF | Eliminar grupos repetidos | Dividir datos separados por comas |
| 2NF | Eliminar dependencias parciales | Garantizar la dependencia total de la clave primaria |
| 3NF | Eliminar dependencias transitivas | Mover atributos derivados |
Ventajas:
- Reduce la redundancia.
- Garantiza la consistencia de los datos.
- Simplifica el mantenimiento.
Desventajas:
- Uniones complejas.
- Posibles compensaciones de rendimiento para las consultas analíticas.
19) ¿Cuáles son los diferentes tipos de restricciones en T-SQL?
Las restricciones imponen reglas sobre la integridad de los datos dentro de una tabla.
| Restricción | Proposito | Ejemplo |
|---|---|---|
| CLAVE PRIMARIA | Identifica de forma única cada fila | PRIMARY KEY (EmpID) |
| Llave extranjera | Enlaces entre dos tablas | FOREIGN KEY (DeptID) |
| UNIQUE | Garantiza valores de columna únicos | UNIQUE (Email) |
| CHEQUEAR | Valida el rango de datos | CHECK (Age >= 18) |
| DEFAULT | Proporciona valores predeterminados | DEFAULT GETDATE() |
Las restricciones garantizan la precisión y la fiabilidad, reduciendo la necesidad de una validación exhaustiva a nivel de aplicación.
20) ¿Cómo se gestionan los permisos y la seguridad en T-SQL?
T-SQL gestiona la seguridad de la base de datos mediante inicios de sesión, usuarios, roles y permisos.
Los permisos se pueden conceder o revocar a nivel de objeto o de esquema.
Ejemplo:
CREATE LOGIN John WITH PASSWORD = 'Strong@123'; CREATE USER John FOR LOGIN John; GRANT SELECT, INSERT ON Employees TO John;
Mejores Prácticas:
- Use También soy miembro del cuerpo docente de World Extreme Medicine (WEM) y embajadora europea de igualdad para The Transformational Travel Council (TTC). En mi tiempo libre, soy una incansable aventurera, escaladora, patrona de día, buceadora y defensora de la igualdad de género en el deporte y la aventura. En XNUMX, fundé Almas Libres, una ONG nacida para involucrar, educar y empoderar a mujeres y niñas a través del deporte urbano, la cultura y la tecnología. en lugar de permisos de usuario directos.
- Evitar el uso de
sao cuentas del sistema para aplicaciones. - Audite periódicamente los permisos con
sys.database_permissions.
Una gestión adecuada de los permisos garantiza el principio de mínimo privilegio y el cumplimiento de las políticas de seguridad.
21) ¿Cuáles son los diferentes niveles de aislamiento de transacciones en T-SQL?
Los niveles de aislamiento de las transacciones determinan cómo se aísla una transacción de las demás, equilibrando así su contenido. consistencia con concurrenciaSQL Server admite lo siguiente:
| Nivel de aislamiento | Descripción | Lectura sucia | Lectura no repetible | Lectura fantasma |
|---|---|---|---|---|
| LEER SIN COMPROMISO | Lee datos no confirmados | Sí | Sí | Sí |
| LEER COMPROMETIDO | Por defecto; los bloqueos impiden lecturas sucias. | No | Sí | Sí |
| LECTURA REPETIBLE | Impide el cambio de datos hasta que se confirme. | No | No | Sí |
| SERIALIZABLE | Aislamiento total; bloqueo de máxima seguridad | No | No | No |
| INSTANTÁNEA | Utiliza control de versiones, no bloqueo | No | No | No |
Ejemplo:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; -- your code COMMIT;
Use INSTANTÁNEA para sistemas de alta concurrencia, para minimizar el bloqueo sin sacrificar la consistencia.
22) ¿Qué es un interbloqueo en SQL Server y cómo se puede prevenir?
A punto muerto Se produce cuando dos transacciones mantienen bloqueos que la otra necesita, lo que genera un punto muerto. SQL Server detecta y finaliza automáticamente una de las transacciones como víctima del interbloqueo.
Escenario de ejemplo:
- La transacción A bloquea la Tabla1 y luego espera a que la Tabla2 esté disponible.
- La transacción B bloquea la Tabla2 y luego espera a la Tabla1.
Técnicas de prevención:
- Acceda a los recursos en el mismo orden.
- Mantén las transacciones breves.
- Utilice los niveles de aislamiento adecuados.
- Evite la interacción del usuario dentro de las transacciones.
Utilice SQL Profiler o Eventos extendidos para rastrear los interbloqueos en tiempo real.
23) Explique la diferencia entre el control de concurrencia pesimista y optimista.
| Categoría | Descripción | Mecanismo de bloqueo | Caso de uso |
|---|---|---|---|
| Pesimista | Bloquea los datos durante la transacción. | Bloqueo pesado | Entornos de alto conflicto |
| Optimista | Utiliza control de versiones por fila y realiza comprobaciones antes de confirmar. | Bloqueo mínimo | Cargas de trabajo con mucho volumen de lectura y bajo nivel de conflicto |
Ejemplo:
- Pesimista: Predeterminado
READ COMMITTEDcierre. - Optimista:
SNAPSHOTAislamiento con control de versiones de filas.
La concurrencia optimista mejora el rendimiento de los sistemas con grandes operaciones de lectura y actualizaciones poco frecuentes.
24) ¿Cómo se puede analizar y optimizar una consulta T-SQL de ejecución lenta?
- Revisar el plan de ejecución: Identificar escaneos, índices faltantes y operaciones costosas.
- Utilice SET STATISTICS IO/TIME: Analizar el uso de E/S y CPU.
- Evite cursores y bucles: Sustituir por operaciones basadas en conjuntos.
- Optimización del índice: Agregar o reorganizar índices fragmentados.
- Rastreo de parámetros: Use
OPTION (RECOMPILE)para generar nuevos planes.
Ejemplo:
SET STATISTICS TIME ON; SELECT * FROM Orders WHERE CustomerID = 123;
Monitorear regularmente las consultas lentas con Vistas de gestión dinámica (DMV) como sys.dm_exec_query_stats es una buena práctica.
25) ¿Qué es SQL dinámico y cuáles son sus ventajas y riesgos?
El SQL dinámico permite construir sentencias SQL de forma dinámica en tiempo de ejecución utilizando variables.
Ejemplo:
DECLARE @sql NVARCHAR(MAX); SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + ''''; EXEC(@sql);
Ventajas:
- Flexibilidad para nombres de tablas o filtros variables.
- Reutilizable para múltiples esquemas.
Desventajas:
- Vulnerable a SQL Injection si no está parametrizado.
- Más difícil de depurar y mantener.
Siempre usa sp_executesql con parámetros de seguridad.
26) ¿Qué son los objetos temporales en T-SQL y en qué se diferencian?
Los objetos temporales se almacenan en base de datos temporal y ayudar a gestionar los datos intermedios.
| Tipo de objeto | <b></b><b></b> | Ejemplo |
|---|---|---|
| Tabla de temperatura local | Específico de la sesión | CREATE TABLE #TempTable |
| Tabla temporal global | Visible para todas las sesiones | CREATE TABLE ##TempGlobal |
| Variable de tabla | Específico del lote | DECLARE @Temp TABLE (...) |
Mejores Prácticas:
- Para conjuntos de datos más pequeños, es preferible utilizar variables de tabla.
- Utilice tablas temporales locales para conjuntos de datos más grandes que requieran indexación.
- Elimina explícitamente las tablas temporales para liberar recursos más rápidamente.
27) ¿Cómo se utilizan las funciones de partición de ventanas en T-SQL?
La partición permite aplicar funciones de ventana a subconjuntos específicos de datos.
Ejemplo:
SELECT
Department,
EmpName,
Salary,
RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;
Beneficios:
- Calcula de forma eficiente clasificaciones, totales y promedios por grupo.
- Elimina la necesidad de autouniones o subconsultas.
Casos de uso: Rangos salariales, clasificaciones de ventas y análisis de tendencias.
28) ¿Cuál es la diferencia entre UNION y UNION ALL en T-SQL?
| Cláusula | Duplicados | Rendimiento | Caso de uso |
|---|---|---|---|
| UNIÓN | Elimina duplicados | Más lento (utiliza sort/distinct) | Combinando conjuntos de resultados de forma limpia |
| UNION TODO | Conserva los duplicados | Más rápido | Agregación o migración de datos |
Ejemplo:
SELECT City FROM Customers UNION SELECT City FROM Suppliers;
Utilice UNION ALL cuando se aceptan duplicados y el rendimiento importa.
29) ¿Cómo se trabaja con datos JSON en T-SQL?
SQL Server admite funciones JSON nativas para analizar y generar datos JSON.
Ejemplo:
DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;
Funciones clave:
JSON_VALUE()→ Extrae valores escalares.JSON_QUERY()→ Extrae objetos/matrices.OPENJSON()→ Analiza JSON y lo divide en filas.FOR JSON→ Convierte los resultados de la consulta al formato JSON.
Útil para API, sistemas híbridos e integraciones NoSQL.
30) ¿Cómo se puede administrar y optimizar TempDB en SQL Server?
TempDB Es una base de datos del sistema crítica para el almacenamiento temporal y el control de versiones. Una mala gestión puede provocar graves problemas de rendimiento.
Técnicas de optimización:
- Coloca TempDB en un almacenamiento rápido (SSD).
- Precalcular el tamaño de los archivos de datos y de registro.
- Utilice varios archivos de datos (1 por núcleo de CPU hasta 8).
- Monitor con
sys.dm_db_file_space_usage. - Limpie regularmente los objetos temporales.
Consulta de ejemplo:
SELECT * FROM sys.dm_db_file_space_usage;
La gestión proactiva de TempDB evita la contención en las páginas de asignación y mejora el rendimiento general de la base de datos.
31) ¿Qué son las sugerencias de consulta en T-SQL y cuándo deben usarse?
Las sugerencias de consulta indican al optimizador de SQL Server que modifique su plan de ejecución normal.
Deben utilizarse con moderación; solo cuando se comprenda completamente la distribución de datos y el contexto de ejecución.
Ejemplo:
SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;
Consejos comunes:
NOLOCK:Lecturas sin bloqueos (puede leer datos no confirmados).FORCESEEK:Fuerza el índice de búsqueda en lugar del escaneo.OPTIMIZE FOR:Guía los valores de los parámetros para la generación del plan.RECOMPILE:Fuerza la recompilación en cada ejecución.
Precaución: El uso excesivo de sugerencias puede degradar el rendimiento a medida que aumentan los datos o cambian los patrones. Úselas solo cuando se demuestre que el plan del optimizador es ineficiente.
32) Explique el concepto de almacenamiento en caché del plan de ejecución en SQL Server.
SQL Server almacena en caché los planes de ejecución para evitar la recompilación de consultas recurrentes.
Cuando se ejecuta de nuevo la misma consulta con una estructura idéntica, se reutiliza el plan almacenado en caché, lo que mejora el rendimiento.
Ejemplo:
EXEC GetCustomerOrders @CustomerID = 101;
Beneficios:
- Reduce la carga de la CPU.
- Mejora la consistencia en el tiempo de respuesta.
Problemas:
- Detección de parámetros puede dar lugar a planes ineficientes.
- El exceso de memoria en la caché de planes puede consumir mucha memoria.
Mitigación: Use OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN donde los parámetros varían ampliamente.
33) ¿Qué es la detección de parámetros y cómo puede afectar al rendimiento?
La detección de parámetros se produce cuando SQL Server utiliza los valores de los parámetros de la primera ejecución de una consulta para generar un plan que luego se reutiliza, incluso si no es óptimo para ejecuciones posteriores.
Escenario de ejemplo:
- Primera ejecución: conjunto de datos pequeño → plan de búsqueda de índice.
- Siguiente ejecución: conjunto de datos grande → se reutiliza el mismo plan, pero lento.
Soluciones:
- Use
OPTION (RECOMPILE)para generar nuevos planes. - Utilice variables locales para enmascarar los valores de los parámetros.
- Use
OPTIMIZE FORorOPTIMIZE FOR UNKNOWN.
La detección de parámetros es una de las principales causas reales de rendimiento impredecible en T-SQL.
34) ¿Cómo se monitorea y analiza el rendimiento de las consultas en SQL Server?
Puedes utilizar varias herramientas y DMV para perfilar y optimizar el rendimiento:
- Planes de ejecución:
Ctrl + Men SSMS osys.dm_exec_query_plan. - DMV:
sys.dm_exec_query_stats– CPU y duración.sys.dm_exec_sql_text– Texto SQL.sys.dm_exec_requests– Consultas activas.
- Monitor de rendimiento y eventos extendidos para el seguimiento a largo plazo.
Ejemplo:
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) Explique el papel de la estadística en la optimización de consultas.
Las estadísticas describen la distribución de datos (por ejemplo, valores distintos, densidad, histograma) que el optimizador utiliza para estimar la cardinalidad.
Si las estadísticas están desactualizadas, SQL Server puede elegir planes inadecuados.
Comandos clave:
UPDATE STATISTICS Employees;sp_updatestats;- Configuración de actualización automática: activada por defecto.
Mejores Prácticas:
- Guardar
AUTO_UPDATE_STATISTICShabilitada. - Para mesas grandes, programe actualizaciones manuales.
- Use
FULLSCANpara índices críticos.
Las estadísticas obsoletas son un asesino silencioso del rendimiento.
36) ¿Cuál es la diferencia entre una búsqueda de índice y un escaneo de índice?
| Operadisrupción | Descripción | Rendimiento | Caso de uso |
|---|---|---|---|
| Buscar índice | Navega directamente a las filas coincidentes. | Rápido | Consultas altamente selectivas |
| Escaneo del índice | Lee todas las entradas del índice secuencialmente. | Más lento | Consultas de baja selectividad |
Ejemplo:
SELECT * FROM Orders WHERE OrderID = 123; -- Seek SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan
Consejo de optimización: Cree índices filtrados o de cobertura para convertir los escaneos en búsquedas.
37) Explique las tablas particionadas y sus ventajas.
La partición divide una tabla grande en partes más pequeñas y manejables (particiones), a menudo basándose en una columna de rango (como la fecha).
Beneficios:
- Gestión de datos más rápida (carga/descarga por partición).
- Mejora del rendimiento de las consultas en grandes conjuntos de datos.
- Procesamiento paralelo para escaneos particionados.
Ejemplo:
CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');
Caso de uso: Almacenes de datos que manejan miles de millones de filas donde las particiones antiguas se pueden archivar de manera eficiente.
38) ¿Qué son las CTE recursivas y qué limitaciones tienen?
A Expresión de tabla común recursiva (CTE) Se refiere a sí mismo, normalmente para datos jerárquicos como organigramas o estructuras de árbol.
Ejemplo:
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;
Limitaciones:
- Límite de recursión predeterminado = 100 niveles.
- Puede provocar problemas de rendimiento si la profundidad de recursión es alta.
- Use
OPTION (MAXRECURSION n)para ajustar el límite.
39) ¿Cómo maneja SQL Server los errores internamente en las transacciones?
Cuando se produce un error en una transacción:
- Si grave (nivel > 20)La conexión se interrumpe inmediatamente.
- If no grave, se puede atrapar con
TRY...CATCH.
Ejemplo:
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;
Mejora la práctica: Siempre incluya las operaciones DML en un bloque TRY…CATCH para garantizar la tolerancia a errores.
40) ¿Cuáles son algunas técnicas avanzadas de ajuste del rendimiento de T-SQL?
- Evite las UDF escalares. En SELECT, las funciones en línea son más rápidas.
- Utilizar índices filtrados para reducir el tamaño del índice.
- Aprovechar el procesamiento de transacciones en línea (OLTP) en memoria (Hekaton) para sistemas de alta concurrencia.
- Ejecución en modo por lotes sobre índices de almacenamiento en columnas para análisis.
- Eliminar conversiones implícitas al hacer coincidir los tipos de datos.
- Utilice el almacén de consultas para comparar planes históricos.
Ejemplo para detectar conversiones implícitas:
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%';
La optimización del rendimiento es un proceso continuo, no un evento puntual.
41) ¿Cómo identificaría las consultas que consumen más recursos en SQL Server?
Puede identificar las consultas de alto costo utilizando las Vistas de administración dinámica (DMV) que registran las estadísticas históricas de ejecución.
Ejemplo:
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;
Métricas clave:
AvgCPUTiempo promedio de CPU por ejecución.AvgReadsIntensidad de entrada/salida.AvgDurationLatencia de ejecución.
Este enfoque ayuda a los administradores de bases de datos a aislar las consultas pesadas antes de que los usuarios noten siquiera la degradación del rendimiento.
42) ¿Cómo se pueden detectar y corregir los índices faltantes en SQL Server?
SQL Server realiza un seguimiento automático de las recomendaciones de índices faltantes a través de las DMV.
Ejemplo:
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;
Mejores Prácticas:
- Priorizar primero los índices de alta demanda.
- Verificar mediante planes de ejecución antes de la creación.
- Evite la sobreindexación; ralentiza las escrituras.
43) ¿Cuál es la diferencia entre la creación de reflejos de bases de datos, la replicación y el envío de registros?
| Característica | Proposito | Gestión del riesgo | Failover | Complejidad: |
|---|---|---|---|---|
| Reflejando | Copia de base de datos de alta disponibilidad | Sí | Automático | Media |
| Replicación | Distribución de datos en bases de datos | Parcial | Manual | Alta |
| Envío de troncos | Estrategia de recuperación ante desastres basada en copias de seguridad | No | Manual | Baja |
Guía de uso:
- Duplicación → Sistemas OLTP de alta disponibilidad.
- Replicación → Informes distribuidos.
- Envío de registros → Configuraciones de recuperación ante desastres.
44) ¿Cómo se solucionan los problemas de bloqueo en SQL Server?
El bloqueo se produce cuando un proceso mantiene bloqueos que otro proceso necesita.
Para identificar los bloqueadores:
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;
Soluciones:
- Reducir la duración de las transacciones.
- Utilice el aislamiento de instantáneas.
- Ajusta las consultas para minimizar el bloqueo.
- Identificar transacciones abiertas de larga duración con
DBCC OPENTRAN.
45) ¿Cómo ayuda el Almacén de Consultas de SQL Server en la optimización del rendimiento?
Query Store captura el texto de la consulta, los planes y las estadísticas de tiempo de ejecución, lo que permite análisis de regresión del plan.
Ayuda a identificar cuándo una consulta se vuelve repentinamente lenta debido a cambios en el plan.
Ejemplo:
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;
Beneficios:
- Comparar planos históricos.
- Impulsa buenos planes.
- Realizar un seguimiento de las tendencias de rendimiento a lo largo del tiempo.
46) ¿Cómo se puede prevenir la inyección SQL en aplicaciones T-SQL?
Defensas primarias:
- Use consultas parametrizadas vía
sp_executesql. - Validar y desinfectar todas las entradas del usuario.
- Evite la concatenación dinámica de SQL.
- Emplear principio de privilegio mínimo para cuentas de bases de datos.
Ejemplo seguro:
DECLARE @sql NVARCHAR(MAX); SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept'; EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';
Aunque la inyección SQL es a nivel de aplicación, Los administradores de bases de datos deben auditar los procedimientos almacenados y los registros. para ejecución sin parámetros.
47) ¿Cómo utiliza los Eventos Extendidos para una monitorización profunda del rendimiento?
Extended Events (XEvents) es un marco de monitoreo de rendimiento ligero: una alternativa moderna a SQL Trace.
Ejemplo:
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;
Casos de uso:
- Monitorizar las consultas que consumen muchos recursos de CPU.
- Captura interbloqueos o índices faltantes.
- Perfile las sentencias de larga duración en producción con una sobrecarga mínima.
48) ¿Qué son los índices filtrados y cuándo deben usarse?
Un índice filtrado indexa solo un subconjunto de filas que cumplen una condición de filtro, lo que mejora el rendimiento y reduce el almacenamiento.
Ejemplo:
CREATE INDEX IX_ActiveEmployees ON Employees (Department) WHERE Status = 'Active';
Beneficios:
- Índice de menor tamaño.
- Mantenimiento más rápido.
- Optimizado para consultas selectivas.
Mejores For: Columnas con distribución de datos sesgada (por ejemplo, registros activos frente a inactivos).
49) ¿Cómo se migran los datos de forma segura entre entornos de SQL Server?
La migración segura de datos implica planificación para consistencia, tiempo de inactividad y reversión.
Mejores Prácticas:
- Use replicación transaccional or cambiar la captura de datos (CDC) para sincronización en directo.
- Desactive temporalmente las restricciones y los activadores.
- Use BCP or SSIS para la transferencia masiva de datos.
- Validar el número de filas y las sumas de comprobación.
- Ejecute siempre comprobaciones de integridad posteriores a la migración (
DBCC CHECKDB).
Ejemplo:
bcp Database.dbo.Table out TableData.dat -n -S Server -T
Probar los scripts de migración en el entorno de pruebas es imprescindible.
50) ¿Cómo se identifican y solucionan los problemas de consultas sensibles a parámetros (PSQ)?
Las consultas que dependen de parámetros tienen un rendimiento inconsistente según los valores de los parámetros; un desafío frecuente en el mundo real.
Detección: Use Almacén de consultas or sys.dm_exec_query_stats identificar múltiples planes para una consulta.
Estrategias de solución:
- Use OPCIÓN (RECOMPILAR) para cada ejecución.
- Use OPTIMIZAR PARA LO DESCONOCIDO para crear un plan genérico.
- Crear guías de planificación para garantizar rutas de ejecución óptimas.
- Use sugerencias de consulta Solo si es necesario.
Las cuestiones sensibles a los parámetros requieren un equilibrio entre la estabilidad del plan y la previsibilidad del rendimiento.
🔍 Principales preguntas de entrevista sobre T-SQL con escenarios reales y respuestas estratégicas
1) ¿Cuál es la diferencia entre INNER JOIN y LEFT JOIN en T-SQL?
Se espera del candidato: El entrevistador quiere evaluar tu comprensión de las operaciones de unión y cómo se gestionan las relaciones de datos en las consultas SQL.
Respuesta de ejemplo: An INNER JOIN devuelve solo las filas que tienen valores coincidentes en ambas tablas, mientras que una LEFT JOIN Devuelve todas las filas de la tabla izquierda, junto con las filas coincidentes de la tabla derecha. Si no hay coincidencia, se devuelven valores NULL para las columnas de la tabla derecha. Esta distinción es crucial al trabajar con relaciones parciales u opcionales en bases de datos.
2) ¿Cómo identificaría y eliminaría los registros duplicados de una tabla en T-SQL?
Se espera del candidato: El entrevistador quiere ver su capacidad para utilizar funciones de ventana y CTE para abordar problemas de calidad de datos.
Respuesta de ejemplo: Utilizaría una expresión de tabla común (CTE) combinada con la ROW_NUMBER() Función para identificar duplicados. Por ejemplo:
WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn FROM MyTable ) DELETE FROM CTE WHERE rn > 1;
Este enfoque ayuda a eliminar duplicados al tiempo que conserva un registro único para cada grupo.
3) ¿Puedes explicar qué es una CTE (Expresión de Tabla Común) y cuándo la usarías?
Se espera del candidato: El entrevistador está comprobando tus conocimientos sobre estructuración de consultas y conjuntos de resultados temporales.
Respuesta de ejemplo: Una CTE es un conjunto de resultados temporal definido dentro del ámbito de ejecución de una única consulta. Resulta útil para simplificar combinaciones y subconsultas complejas, mejorar la legibilidad y permitir consultas recursivas. En mi puesto anterior, utilizaba las CTE con frecuencia para dividir la lógica de agregación de varios pasos en componentes más fáciles de mantener.
4) ¿Cómo se gestiona la optimización del rendimiento en las consultas T-SQL?
Se espera del candidato: El entrevistador quiere evaluar su experiencia con la optimización de consultas y la resolución de problemas de rendimiento.
Respuesta de ejemplo: Comienzo examinando el plan de ejecución para identificar operaciones lentas como escaneos de tablas o combinaciones costosas. Luego, verifico si faltan índices, si hay subconsultas redundantes o combinaciones ineficientes. También analizo estadísticas y utilizo estrategias de indexación, como índices de cobertura o índices filtrados, para mejorar el rendimiento. Finalmente, reviso la lógica de la consulta para asegurar que utilice operaciones basadas en conjuntos en lugar de procesamiento fila por fila.
5) Describe una ocasión en la que tuviste que depurar una consulta lenta en producción. ¿Qué pasos seguiste?
Se espera del candidato: Esta pregunta conductual evalúa tus habilidades de resolución de problemas y comunicación en situaciones reales.
Respuesta de ejemplo: En mi puesto anterior, una consulta de informe tardaba más de 20 minutos en ejecutarse. Analicé el plan de ejecución y descubrí que a una de las uniones le faltaba un índice en una columna de clave externa. Tras crear el índice y actualizar las estadísticas, el tiempo de ejecución de la consulta se redujo a menos de 30 segundos. También documenté la solución y la compartí con el equipo para evitar problemas similares en el futuro.
6) ¿Qué son las tablas temporales y las variables de tabla, y en qué se diferencian?
Se espera del candidato: El entrevistador está evaluando tu comprensión de las opciones de almacenamiento temporal de datos en T-SQL.
Respuesta de ejemplo: Tablas temporales (#TempTableLas variables de tabla ( ) se crean en la base de datos tempdb y admiten índices, restricciones y estadísticas.@TableVarLas tablas temporales se almacenan en memoria y tienen soporte estadístico limitado, por lo que son adecuadas para conjuntos de datos pequeños. Son mejores para conjuntos de datos grandes o complejos, mientras que las variables de tabla son más eficientes para datos pequeños y de corta duración.
7) ¿Cómo manejaría el manejo de errores y las transacciones en T-SQL?
Se espera del candidato: El entrevistador está comprobando su comprensión de la integridad transaccional y el manejo de excepciones.
Respuesta de ejemplo: yo suelo BEGIN TRANSACTION, COMMIT y ROLLBACK declaraciones para garantizar la coherencia de los datos. También incluyo TRY...CATCH bloques para gestionar los errores de forma elegante. Por ejemplo:
BEGIN TRY
BEGIN TRANSACTION
-- SQL operations here
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT ERROR_MESSAGE()
END CATCH
Este enfoque evita las actualizaciones parciales de datos cuando se producen errores.
8) ¿Cómo se utilizan las funciones de ventana en T-SQL y puede dar un ejemplo?
Se espera del candidato: El entrevistador quiere evaluar su dominio de consultas analíticas avanzadas.
Respuesta de ejemplo: Las funciones de ventana permiten realizar cálculos en conjuntos de filas relacionadas con la fila actual sin agrupar los datos. Por ejemplo:
SELECT EmployeeID, Salary, RANK() OVER (ORDER BY Salary DESC) AS SalaryRank FROM Employees;
Esto asigna números de clasificación a los empleados en función de su salario, lo que facilita el análisis de las tendencias de rendimiento.
9) Cuéntame sobre un proyecto complejo de T-SQL en el que hayas trabajado y cómo abordaste sus desafíos.
Se espera del candidato: El entrevistador busca experiencia profunda, capacidad para resolver problemas y trabajo en equipo.
Respuesta de ejemplo: En mi último puesto, desarrollé un pipeline ETL para un almacén de datos utilizando procedimientos almacenados en T-SQL. El reto consistía en gestionar grandes volúmenes de datos de forma eficiente. Optimizé las consultas mediante tablas particionadas, cargas incrementales y procesamiento por lotes. Además, coordiné con el equipo de BI para garantizar la coherencia en el diseño de los esquemas y mejorar la velocidad de generación de informes en más de un 40 %.
10) ¿Cómo manejaría una situación en la que un procedimiento almacenado que usted escribió causó un interbloqueo en producción?
Se espera del candidato: El entrevistador está evaluando su capacidad de gestión de crisis y sus conocimientos técnicos.
Respuesta de ejemplo: Primero identificaría el interbloqueo utilizando SQL Server. sys.dm_tran_locks y gráficos de interbloqueo. Luego, analizaba el orden de acceso a los recursos y refactorizaba el procedimiento para adquirir bloqueos en una secuencia consistente. En mi trabajo anterior, también implementé lógica de reintento para las transacciones afectadas y programé una monitorización periódica para detectar patrones similares de forma temprana.
