The SQL Booklet · SQL Server

SQL Server para todos los días.

Sintaxis, exploración, diagnóstico y planes de ejecución reunidos en un mismo lugar.

Mostrando 126 entradas

SELECT y FROM: elegir qué información queremos leer

Una tabla puede contener decenas de columnas, pero una consulta rara vez necesita mostrarlas todas. A veces buscamos el nombre y el correo de un cliente; otras veces necesitamos su…

Consultar

WHERE: decidir qué filas cumplen la condición

Seleccionar las columnas correctas no siempre es suficiente. Podemos necesitar únicamente clientes activos, pedidos confirmados o movimientos ocurridos dentro de un periodo.

Consultar

DISTINCT, TOP y ORDER BY: reducir y ordenar un resultado

Una consulta puede devolver todas las filas que cumplen una condición y aun así no responder exactamente lo que buscamos. Quizá necesitamos conocer los estados existentes sin repet…

Consultar

INNER JOIN: conservar las coincidencias

Tenemos clientes en una tabla y pedidos en otra. Las dos contienen información distinta sobre la misma operación: una identifica a la persona y la otra registra lo que ocurrió con …

Consultar

LEFT, RIGHT y FULL JOIN: conservar filas sin coincidencia

Un INNER JOIN responde bien cuando solo nos interesan las filas relacionadas. El problema cambia cuando también necesitamos ver lo que quedó fuera: clientes sin pedidos, productos …

Consultar

CROSS JOIN, CROSS APPLY y OUTER APPLY: combinar y evaluar filas

Estas construcciones comparten una palabra, pero resuelven necesidades distintas. CROSS JOIN genera combinaciones entre dos conjuntos. APPLY permite ejecutar una expresión tabular …

Consultar

COUNT, SUM, AVG, MIN y MAX: resumir un conjunto

A veces no necesitamos observar cada producto por separado. Queremos saber cuántos están activos, cuánto suman sus precios o cuáles son los valores mínimo y máximo del catálogo.

Consultar

GROUP BY y HAVING: resumir y filtrar por grupo

Un total general puede decirnos cuántos pedidos existen, pero no cómo se distribuyen. Si necesitamos una cantidad por cliente, por estado o por mes, debemos formar grupos antes de …

Consultar

CASE: expresar decisiones dentro de una consulta

Una consulta no siempre debe devolver el valor exactamente como está almacenado. A veces necesitamos clasificar una existencia, traducir un estado o calcular un valor distinto segú…

Consultar

COALESCE, ISNULL y NULLIF: trabajar con valores ausentes

Un valor NULL representa información desconocida o no disponible. No equivale a cero, a una cadena vacía ni a una cadena formada por espacios. Esos estados pueden necesitar el mism…

Consultar

INSERT: agregar filas de forma explícita

Cuando registramos un cliente, un pedido o un movimiento de inventario necesitamos crear filas nuevas. INSERT indica la tabla de destino, las columnas que recibiremos y los valores…

Consultar

UPDATE: modificar únicamente las filas previstas

Actualizar datos parece sencillo hasta que una condición afecta más filas de las esperadas. La parte esencial de un UPDATE no es la asignación, sino demostrar antes cuáles filas ca…

Consultar

DELETE y TRUNCATE: retirar datos con alcances diferentes

Eliminar información exige distinguir dos intenciones: borrar filas seleccionadas o vaciar una tabla completa. DELETE y TRUNCATE TABLE pueden dejar una tabla sin datos, pero no sig…

Consultar

UNION y UNION ALL: combinar resultados compatibles

Algunas veces la información vive en tablas distintas pero representa el mismo tipo de entidad. Podemos tener pedidos actuales y pedidos históricos, o resultados provenientes de do…

Consultar

Subconsultas, EXISTS y NOT EXISTS: utilizar resultados relacionados

Una consulta puede necesitar la respuesta de otra: saber si un cliente tiene pedidos, comparar un precio con el promedio o recuperar un valor calculado para la fila actual.

Consultar

WITH y CTE: nombrar un resultado intermedio

Una consulta extensa puede repetir cálculos, mezclar demasiados niveles o esconder la intención principal. Una expresión de tabla común, conocida como CTE, permite dar nombre a un …

Consultar

OVER y PARTITION BY: calcular sin perder el detalle

Una agregación con GROUP BY reduce varias filas a un resumen. Eso funciona cuando solo necesitamos el total, pero no cuando queremos conservar cada partida y mostrar junto a ella e…

Consultar

ROW_NUMBER, RANK y DENSE_RANK: numerar y clasificar filas

Ordenar un resultado no asigna una posición que podamos reutilizar. Si necesitamos elegir el pedido más reciente de cada cliente, numerar resultados o representar empates, utilizam…

Consultar

OFFSET y FETCH: dividir un resultado ordenado en páginas

Una pantalla de búsqueda rara vez muestra miles de filas a la vez. Necesitamos solicitar una porción del resultado: la primera página, la segunda o cualquier bloque posterior.

Consultar

CAST, CONVERT, TRY_CAST y TRY_CONVERT: controlar tipos de datos

SQL Server puede convertir algunos valores de forma implícita, es decir, sin que la consulta solicite la conversión de manera expresa. Confiar en ello puede ocultar errores, altera…

Consultar

Funciones de texto: construir, localizar y normalizar cadenas

Los textos suelen llegar con mayúsculas diferentes, espacios adicionales o fragmentos que necesitamos localizar. SQL Server incluye funciones para combinar, extraer, buscar, reempl…

Consultar

Funciones de fecha: calcular periodos y construir límites seguros

Las fechas representan instantes —puntos concretos en el tiempo— o periodos —intervalos entre dos límites—, no textos con un formato visual. Para sumar días, medir diferencias, obt…

Consultar

Tablas temporales y variables de tabla: conservar resultados durante un proceso

Algunas tareas necesitan separar una consulta compleja en etapas, reutilizar un conjunto o inspeccionarlo antes de modificar datos. SQL Server ofrece tablas temporales y variables …

Consultar

Transacciones y TRY/CATCH: completar o revertir una unidad de trabajo

Cuando una operación modifica varias tablas, conservar solo la primera mitad puede dejar datos inconsistentes. Una transacción agrupa instrucciones para confirmarlas juntas con COM…

Consultar

Operadores de comparación y lógicos: construir condiciones precisas

Una condición es una expresión cuyo resultado decide si una fila cumple una regla. Puede ser sintácticamente válida y aun así seleccionar filas distintas a las que imaginamos. Los …

Consultar

DECLARE, SET y asignación con SELECT: trabajar con variables

Una consulta reutilizable no debería obligarnos a modificar valores dispersos dentro del código. Una variable conserva un valor bajo un nombre durante su alcance. Puede representar…

Consultar

IF, ELSE y BEGIN...END: decidir qué instrucciones ejecutar

Algunos procesos deben seguir rutas distintas según exista información, un parámetro sea válido o una operación haya afectado filas. IF evalúa una condición y decide qué instrucció…

Consultar

WHILE, BREAK y CONTINUE: repetir con un límite visible

SQL está diseñado principalmente para operar sobre conjuntos: indicar qué filas deben afectarse sin recorrerlas una por una. Aun así, algunos procesos necesitan repetir un bloque m…

Consultar

CREATE, ALTER y DROP: administrar el ciclo de vida de un objeto

Las consultas trabajan con objetos: estructuras con nombre definidas dentro de la base, como tablas, vistas, procedimientos, funciones e índices. CREATE, ALTER y DROP representan t…

Consultar

CREATE TABLE y restricciones: expresar reglas desde el esquema

Una tabla no es solo una lista de columnas. También debe expresar cómo se identifica cada fila, qué relaciones son válidas y qué valores puede aceptar.

Consultar

ALTER TABLE: cambiar una estructura que ya contiene datos

Las bases evolucionan: aparece un dato nuevo, cambia una longitud o necesitamos proteger una regla que antes solo vivía en la aplicación.

Consultar

Vistas: nombrar y reutilizar una consulta

Una misma selección puede aparecer en reportes, integraciones y pantallas diferentes. Una vista es un objeto que asigna un nombre a una consulta y presenta su resultado como un con…

Consultar

Procedimientos almacenados: encapsular una operación con parámetros

Cuando una consulta debe ejecutarse desde varias aplicaciones o necesita combinar validaciones, lecturas y modificaciones, un procedimiento permite darle un nombre y una interfaz e…

Consultar

Funciones definidas por el usuario: reutilizar un cálculo o un conjunto

Algunas reglas aparecen una y otra vez dentro de consultas: calcular un importe, obtener una etiqueta o seleccionar un conjunto mediante un parámetro. Una función les asigna un nom…

Consultar

PIVOT y UNPIVOT: cambiar la orientación de un conjunto

Un reporte puede necesitar una columna por estado, mes o categoría aunque los datos originales estén almacenados como filas. PIVOT convierte valores de una columna en encabezados y…

Consultar

INTERSECT y EXCEPT: comparar conjuntos de filas

Cuando necesitamos saber qué elementos comparten dos consultas o cuáles aparecen solamente en una, podemos expresar la comparación directamente como una operación entre conjuntos.

Consultar

OUTPUT, inserted y deleted: observar las filas modificadas

Después de insertar, actualizar o eliminar datos, a menudo necesitamos conocer las filas realmente afectadas. OUTPUT devuelve valores de las imágenes lógicas inserted y deleted com…

Consultar

STRING_AGG y STRING_SPLIT: reunir y separar texto delimitado

Algunas salidas necesitan presentar varios valores en una sola cadena; otras reciben una cadena con elementos delimitados que debemos convertir en filas. STRING_AGG reúne y STRING_…

Consultar

JSON: leer, transformar y producir documentos desde SQL Server

Una API —una interfaz mediante la que dos sistemas intercambian solicitudes y respuestas— o integración puede entregar un documento JSON que necesitamos validar y convertir en fila…

Consultar

MERGE: comparar una fuente con una tabla de destino

Una carga puede traer filas que debemos insertar cuando son nuevas y actualizar cuando ya existen. MERGE expresa esa comparación mediante una fuente —el conjunto entrante—, un dest…

Consultar

OPTION y query hints: influir en la compilación

Una consulta describe el resultado que necesitamos. El optimizador de SQL Server compara alternativas y elige un plan para producirlo. Un **query hint** —una indicación aplicada a …

Consultar

Consultar clientes con sus pedidos confirmados

Necesitamos preparar una lista de pedidos confirmados. El nombre del cliente está en Cliente, mientras que la fecha y el estado pertenecen a Pedido.

Consultar

Encontrar clientes que todavía no tienen pedidos

Queremos identificar clientes activos que aún no aparecen en Pedido. La dificultad consiste en conservar precisamente las filas que no encuentran correspondencia.

Consultar

Mostrar el primer teléfono disponible de cada cliente

El sistema guarda teléfono móvil y teléfono de casa en columnas distintas. Queremos presentar un único teléfono de contacto, prefiriendo el móvil y evitando tratar una cadena vacía o compuesta por espacios como un número

Consultar

Obtener ventas totales por cliente y filtrar las más altas

Queremos conocer cuánto ha comprado cada cliente en pedidos confirmados o enviados. Cada partida tiene cantidad, precio unitario y descuento; por tanto, el total no está guardado directamente en Pedido.

Consultar

Insertar un pedido y sus partidas de forma segura

Un pedido y sus partidas representan una sola operación. Una transacción permite confirmar todos sus cambios o revertirlos como una unidad. Si el encabezado se guarda pero una partida falla, no queremos dejar información

Consultar

Actualizar precios de una categoría con validación previa

Necesitamos aumentar 8% el precio de los productos activos de la categoría Accesorios. Antes de modificar, queremos ver el alcance; durante la actualización, registrar los valores anteriores y nuevos.

Consultar

Combinar pedidos actuales e históricos

Los pedidos recientes permanecen en Pedido y PedidoDetalle; los antiguos fueron resumidos en PedidoHistorico. Queremos una cronología única sin ocultar de dónde procede cada fila.

Consultar

Obtener el último pedido de cada cliente

Queremos mostrar una sola fila por cliente con su pedido más reciente. Agrupar por cliente y utilizar MAX(FechaPedido) obtiene la fecha, pero no trae de manera segura el identificador y el estado de esa misma fila.

Consultar

Calcular venta diaria y total acumulado

Necesitamos una serie diaria de ventas y, junto a cada día, el importe acumulado desde el inicio del periodo. La primera cifra reduce partidas a una fila diaria; la segunda utiliza esas filas sin volver a reducirlas.

Consultar

Construir una búsqueda paginada con filtros opcionales

Una pantalla de productos permite escribir parte del nombre, elegir una categoría y limitar un rango de precios. Todos los filtros son opcionales y el resultado debe dividirse en páginas estables.

Consultar

Buscar una tabla o vista por nombre

Conocemos una palabra del nombre —por ejemplo, “Pedido”— pero no sabemos si el objeto es una tabla, una vista ni en qué esquema se encuentra. Abrir carpeta por carpeta funciona en una base pequeña; en una base heredada p

Consultar

Buscar una columna en toda la base

Una pantalla, un error o un requisito menciona IdCliente, pero todavía no sabemos qué tablas guardan ese dato. El nombre de una columna suele ser una pista útil para empezar a reconstruir el modelo.

Consultar

Buscar texto dentro de procedimientos, vistas y funciones

Necesitamos saber dónde aparece el nombre de una tabla, una columna o una llamada concreta. Revisar manualmente cada procedimiento almacenado puede ocultar justo la referencia que explica un comportamiento.

Consultar

Consultar dependencias de un objeto

Antes de modificar una tabla, vista o procedimiento queremos saber qué objetos menciona y qué otros objetos lo mencionan. La duda no es solo “¿existe?”, sino “¿qué podría verse afectado?”.

Consultar

Listar relaciones y llaves foráneas

Encontramos una tabla, pero aún no sabemos qué otras tablas apuntan hacia ella ni a cuáles apunta. Las llaves foráneas registran una parte de esas relaciones y también revelan reglas que pueden afectar una eliminación o

Consultar

Consultar llaves primarias, restricciones únicas e índices

Necesitamos entender cómo se identifica cada fila y qué estructuras existen para conservar unicidad o apoyar búsquedas. Ver solo el nombre de un índice no basta: también importan el orden de sus columnas, las columnas in

Consultar

Listar columnas con tipo, longitud, nulabilidad y valor predeterminado

Encontramos la tabla que buscábamos, pero todavía no sabemos qué datos espera. Antes de escribir un INSERT, preparar una integración o cambiar una columna, necesitamos una radiografía legible de su estructura.

Consultar

Encontrar triggers y sus tablas asociadas

Un INSERT, UPDATE o DELETE produce cambios adicionales, rechaza una operación o tarda más de lo esperado. Parte de esa lógica puede estar en un trigger y ejecutarse sin aparecer en la instrucción original.

Consultar

Encontrar objetos modificados recientemente

Un comportamiento cambió después de un despliegue o necesitamos reconocer qué objetos han recibido modificaciones recientes. El catálogo ofrece una fecha útil para reducir la búsqueda inicial.

Consultar

Obtener conteos aproximados de todas las tablas

Queremos reconocer rápidamente cuáles tablas están vacías, cuáles tienen miles de filas y cuáles dominan el volumen de la base. Ejecutar COUNT(*) sobre cada tabla puede ser innecesariamente costoso para una primera explo

Consultar

Medir el espacio utilizado por cada tabla

La base está creciendo o necesitamos decidir dónde concentrar una revisión. El número de filas ayuda, pero no revela cuánto almacenamiento consumen los datos, índices y páginas reservadas.

Consultar

Revisar columnas IDENTITY y su valor actual

Una tabla presenta saltos en sus identificadores, recibió una carga con valores explícitos o se acerca al límite de su tipo numérico. Antes de modificar la secuencia necesitamos conocer su definición y el último valor ge

Consultar

Detectar registros duplicados por una clave de negocio

Una carga contiene clientes con correos repetidos, o una tabla permite guardar varias filas que representan el mismo dato funcional. La llave primaria distingue cada registro, pero no responde si el negocio los considera

Consultar

Detectar registros huérfanos

Una carga contiene pedidos cuyo cliente no aparece en el catálogo recibido. También puede ocurrir en una base sin llaves foráneas, después de una migración incompleta o cuando la relación se valida únicamente en la aplic

Consultar

Comparar dos conjuntos de datos

Una carga de productos debería coincidir con la tabla actual, pero necesitamos saber qué filas faltan y cuáles contienen valores diferentes. Comparar solo el número de registros puede ocultar cambios importantes.

Consultar

Validar conversiones antes de modificar una columna

Una tabla de carga guarda fechas y cantidades como texto. Antes de convertir las columnas o mover los datos a tablas definitivas necesitamos encontrar los valores que no cumplen el formato esperado.

Consultar

Ejecutar un UPDATE con validación y reversión controlada

Necesitamos aumentar el precio de los productos activos de una categoría. La condición parece sencilla, pero un filtro incorrecto podría modificar más filas de las previstas y dejar el error confirmado antes de detectarl

Consultar

Ejecutar un DELETE con respaldo lógico y reversión controlada

Una corrección requiere retirar movimientos de inventario identificados y anteriores a una fecha. Además de comprobar el filtro, necesitamos conservar una copia recuperable si la eliminación llega a confirmarse.

Consultar

Comparar la estructura de dos bases de datos

Una aplicación funciona en desarrollo, pero falla al desplegarse porque una columna tiene otra longitud, permite valores nulos o utiliza un tipo diferente en producción. Revisar las tablas una por una hace fácil pasar po

Consultar

Describir el resultado de una consulta o procedimiento

Necesitamos integrar una consulta en una aplicación, pero no sabemos con certeza qué nombres, tipos y nulabilidad devolverá. Ejecutarla con datos reales puede ser costoso o exigir parámetros que todavía no tenemos prepar

Consultar

Encontrar tablas sin llave primaria

Una actualización necesita identificar cada fila de manera inequívoca, pero no sabemos qué tablas declaran una llave primaria. También queremos localizar estructuras que merecen revisión antes de una integración o migrac

Consultar

Buscar un valor en columnas seleccionadas

Conocemos un nombre, correo o referencia, pero no recordamos en cuál de varias columnas de texto se guardó. Generar una búsqueda sobre toda la base sería costoso y podría leer información que no necesitamos.

Consultar

Ver solicitudes activas y su consulta SQL

La aplicación responde con lentitud y necesitamos saber qué está ejecutando SQL Server en este momento. Una lista de sesiones conectadas no basta: una conexión puede existir sin tener una solicitud activa.

Consultar

Identificar sesiones bloqueadoras y bloqueadas

Una solicitud permanece suspendida y muestra un identificador en blocking_session_id. Necesitamos saber quién espera, qué sesión está delante y qué texto podemos inspeccionar en ambos extremos.

Consultar

Construir la cadena de bloqueo

Varias sesiones aparecen bloqueadas y algunas de ellas también bloquean a otras. Leer pares aislados dificulta encontrar la sesión que encabeza el problema.

Consultar

Encontrar transacciones abiertas por mucho tiempo

Una sesión encabeza bloqueos o el log crece mientras una transacción permanece abierta. Necesitamos medir desde cuándo existe y relacionarla con la sesión que la mantiene.

Consultar

Encontrar sesiones inactivas con transacción abierta

Una sesión aparece como sleeping, pero continúa bloqueando otras solicitudes o impide reutilizar espacio del log. No está ejecutando una petición y, aun así, conserva una transacción.

Consultar

Ver esperas de las solicitudes activas

Una solicitud está suspendida, pero el tipo de espera mostrado en su fila no explica todas las tareas que participan. Esto ocurre especialmente en consultas paralelas, donde distintas tareas pueden esperar por motivos di

Consultar

Revisar las principales esperas acumuladas

El servidor se percibe lento en distintos momentos, pero una captura de solicitudes activas no muestra un patrón estable. Necesitamos saber en qué familias de espera se ha concentrado el tiempo desde el inicio de la medi

Consultar

Encontrar consultas con mayor consumo total de CPU

El uso de CPU es elevado o presenta picos repetidos. Antes de revisar planes al azar, necesitamos localizar las sentencias terminadas que más CPU han acumulado entre los planes todavía presentes en caché.

Consultar

Encontrar consultas con mayor lectura lógica

La carga de datos parece excesiva o determinadas operaciones presionan memoria y CPU. Queremos identificar sentencias terminadas que han solicitado más páginas al búfer durante la vida de sus planes en caché.

Consultar

Encontrar consultas con mayor duración promedio

Los usuarios informan respuestas lentas, pero el consumo total oculta operaciones poco frecuentes. Necesitamos localizar sentencias cuyo tiempo transcurrido promedio es alto entre los planes todavía presentes en caché.

Consultar

Recuperar el plan de ejecución almacenado

Una sentencia aparece entre las de mayor CPU, lecturas o duración. Para entender cómo SQL Server decidió ejecutarla, queremos recuperar el plan asociado que todavía se encuentra en caché.

Consultar

Revisar sugerencias de índices faltantes

Una consulta realiza muchas lecturas o presenta un acceso costoso y el plan sugiere un índice. Queremos reunir las sugerencias registradas para la base actual y ordenarlas por su beneficio acumulado estimado.

Consultar

Revisar uso de índices

Una tabla tiene varios índices y necesitamos saber cuáles han participado en lecturas y cuáles han recibido mantenimiento por cambios de datos. La comparación ayuda a encontrar candidatos que merecen una revisión más pro

Consultar

Revisar fragmentación de índices con alcance controlado

Un índice grande participa en lecturas relevantes y queremos conocer su fragmentación antes de considerar mantenimiento. La revisión debe limitarse a un objeto concreto para no convertir el diagnóstico en una carga innec

Consultar

Revisar antigüedad y modificación de estadísticas

Un plan estima cantidades de filas muy distintas de las observadas o cambia de forma inesperada. Necesitamos saber cuándo se actualizaron sus estadísticas, cuánto se muestreó y cuántas modificaciones registra la columna

Consultar

Medir el uso de espacio y log de cada base

Una base se acerca al límite del volumen o el archivo de log crece con frecuencia. Necesitamos separar tamaño asignado, espacio utilizado y espacio todavía disponible dentro de los archivos actuales.

Consultar

Diagnosticar por qué el log no puede reutilizarse

El porcentaje utilizado del log sigue creciendo o no disminuye después de la operación esperada. Necesitamos identificar qué condición reporta SQL Server como impedimento actual para truncar y reutilizar registros inacti

Consultar

Recuperar deadlocks recientes de system_health

Una aplicación recibe errores de víctima de deadlock, pero el bloqueo ya desapareció cuando se revisa el servidor. Necesitamos recuperar el grafo conservado por la sesión system_health para conocer procesos y recursos pa

Consultar

Encontrar consultas degradadas mediante Query Store

Una operación que antes respondía con normalidad ahora tarda más, pero el plan anterior ya no está en caché. Necesitamos comparar una ventana reciente con un periodo base conservado por Query Store.

Consultar

Encontrar sesiones y solicitudes que consumen tempdb

tempdb crece, se acerca a su límite o muestra presión durante una carga concreta. Necesitamos saber qué sesiones conservan asignaciones de objetos de usuario e internos y cuánto corresponde a tareas todavía activas.

Consultar

Revisar concesiones de memoria pendientes o excesivas

Hay esperas RESOURCE_SEMAPHORE, consultas suspendidas o pocas operaciones que parecen reservar gran parte de la memoria disponible para ejecución. Necesitamos ver solicitudes pendientes y concesiones grandes que siguen a

Consultar

Calcular latencia de lectura y escritura por archivo

Las esperas apuntan a entrada y salida o varias bases comparten almacenamiento. Necesitamos comparar cuánto esperan las lecturas y escrituras de cada archivo según los contadores acumulados por SQL Server.

Consultar

Encontrar consultas con varios planes y rendimientos diferentes

Una misma consulta alterna entre respuestas rápidas y lentas, o la [comparación de ventanas en Query Store](/es/diagnostico/encontrar-consultas-degradadas/) mostró una degradación. Queremos comparar los planes que Query

Consultar

Para qué sirve un plan de ejecución

Escribimos una consulta para indicar qué resultado necesitamos. SQL Server todavía debe decidir cómo localizar, combinar y procesar los datos para producirlo. El plan de ejecución representa esa estrategia.

Consultar

Plan estimado, plan real y estadísticas en vivo

SQL Server puede mostrar la estrategia de una consulta antes de ejecutarla, después de observar una ejecución o mientras el trabajo continúa. Las tres modalidades representan el plan, pero no contienen la misma evidencia

Consultar

Cómo se organiza el árbol de un plan de ejecución

Un plan de ejecución puede extenderse de izquierda a derecha en la pantalla, pero su estructura se describe como un árbol. Reconocer sus partes permite seguir la estrategia sin depender todavía del significado de cada ic

Consultar

Flechas, propiedades y número de ejecuciones

El dibujo de un plan permite reconocer operadores y conexiones, pero no contiene toda la evidencia en sus etiquetas visibles. Las flechas ofrecen una primera orientación; las propiedades permiten comprobar qué cantidad r

Consultar

Mapa de operadores: qué papel cumple cada nodo

Un plan pequeño puede contener búsquedas, filtros, uniones, cálculos y ordenamientos en la misma rama. Leer los nombres como una lista aislada obliga a memorizar iconos; agruparlos por la función que cumplen permite reco

Consultar

Filas estimadas y filas reales

SQL Server calcula cuántas filas espera en cada operador y, cuando capturamos un plan real, registra cuántas observó durante esa ejecución. Comparar ambas cifras permite localizar una suposición que no coincidió con los

Consultar

Index Seek, Index Scan y Table Scan

Dos consultas pueden devolver la misma fila y, aun así, recorrer estructuras distintas para encontrarla. El nombre del operador resume ese acceso; las propiedades muestran cuánto leyó, qué entregó y qué condición aplicó.

Consultar

Key Lookup y trabajo repetido

Un índice puede localizar las filas solicitadas sin contener todas las columnas que necesita la consulta. SQL Server utiliza entonces el localizador guardado en ese índice para volver a la fila completa. El plan represen

Consultar

Filter, Compute Scalar y Top

No todos los operadores buscan datos o relacionan tablas. Algunos reciben un flujo ya producido y lo transforman: descartan filas, calculan una columna o detienen la entrega cuando alcanzan un límite.

Consultar

Nested Loops, Hash Match y Merge Join

Una consulta puede escribir un solo INNER JOIN y obtener el mismo resultado mediante estrategias físicas distintas. El tipo de JOIN pertenece a la expresión lógica; Nested Loops, Hash Match y Merge Join describen cómo SQ

Consultar

Sort, Segment y Sequence Project

Una función de ventana conserva cada fila y agrega un valor calculado sobre filas relacionadas. Para producir una numeración por grupo, el plan necesita ordenar el flujo, reconocer dónde cambia cada grupo y mantener el e

Consultar

Stream Aggregate y Hash Match (Aggregate)

GROUP BY expresa que varias filas deben convertirse en un resultado por grupo. El plan todavía debe elegir cómo mantener esos grupos mientras calcula COUNT, SUM u otra agregación.

Consultar

Spool: materialización y reutilización

Algunas ramas producen filas que otro operador podría solicitar varias veces. SQL Server puede conservar ese resultado intermedio en una estructura de trabajo y volver a leerlo en lugar de reconstruirlo siempre desde su

Consultar

Parallelism: distribuir, repartir y reunir filas

Un plan serial realiza el trabajo mediante un solo flujo. Un plan paralelo puede dividir una parte entre varios trabajadores y después coordinar las filas que cada uno produce.

Consultar

Advertencias del plan que requieren investigación

Un triángulo amarillo llama la atención sobre una condición que SQL Server pudo identificar al compilar o ejecutar una consulta. La advertencia señala dónde conviene mirar; no demuestra por sí sola qué causó una demora n

Consultar

Acciones disponibles en el plan gráfico de SSMS

El plan gráfico no es solamente una imagen. SSMS permite inspeccionar un operador, abrir la representación XML, guardar el plan y preparar comparaciones o análisis. Cada acción abre evidencia distinta; ninguna convierte

Consultar

Cómo se organiza el XML Showplan

El plan gráfico de SSMS se construye a partir de un documento XML. El gráfico facilita la orientación; el XML conserva la estructura completa, los atributos de cada operador y, cuando se trata de un plan real, las métric

Consultar

Recorrer Analyze Actual Execution Plan

Analyze Actual Execution Plan revisa un plan real y señala patrones que SSMS reconoce en la ejecución observada. La herramienta ayuda a localizar un punto que merece investigación; no confirma por sí sola la causa ni dec

Consultar

Lecturas con SET STATISTICS IO

El plan muestra la estrategia elegida para resolver una consulta. SET STATISTICS IO agrega otra pieza de evidencia: cuántas páginas leyó SQL Server de cada objeto durante esa ejecución.

Consultar

CPU y duración con SET STATISTICS TIME

Una consulta lenta no necesariamente mantiene ocupado al procesador durante todo ese tiempo. SET STATISTICS TIME separa el trabajo de CPU del tiempo transcurrido y también informa cuánto tardaron el análisis y la compila

Consultar

Construir una línea base repetible

Una medición aislada describe una ejecución. Una línea base conserva las condiciones relevantes, repite la consulta y registra cuánto varían sus resultados antes de cambiar algo.

Consultar

Guardar y comparar dos planes

Dos consultas pueden devolver el mismo resultado mediante estrategias distintas. Guardar cada plan como .sqlplan permite conservar la evidencia y abrir ambos en Compare Showplan sin depender de la memoria o de capturas s

Consultar

Historial y regresiones con Query Store

El plan que vemos en una ejecución no explica cómo se comportó la consulta ayer ni qué estrategia utilizó durante otro intervalo. Query Store conserva texto, planes y estadísticas de ejecución dentro de la base para pode

Consultar

Convertir un escenario de Analyze Actual Execution Plan en una hipótesis

Un escenario de Analyze Actual Execution Plan señala una diferencia que merece investigación. Para convertir esa señal en una hipótesis necesitamos proponer una explicación, anticipar qué debería cambiar si fuera correct

Consultar

Leer una sugerencia Missing Index en el plan

Una sugerencia Missing Index indica que el optimizador encontró una estructura hipotética con la que estimó un costo menor para la consulta. La señal merece revisión, pero no demuestra que el índice deba crearse ni que e

Consultar

Entender el CREATE INDEX generado por SSMS

Missing Index Details convierte una solicitud del optimizador en una instrucción legible. La instrucción ayuda a reconocer una posible estructura, pero todavía no es un índice listo para crear: conserva un nombre provisi

Consultar

Decidir, crear y comprobar un índice

Una sugerencia de índice se convierte en una decisión cuando se compara con las estructuras existentes, se prueba con la misma consulta y se documentan tanto el beneficio como el costo agregado. En esta prueba, el candid

Consultar

De una consulta lenta a una hipótesis comprobable

Una consulta lenta es un síntoma. Para convertirlo en una investigación útil hay que conservar la consulta, reunir evidencia y escribir una explicación que pueda fallar. La primera señal del plan no es todavía la causa.

Consultar

Evaluar un cambio sin optimizar solo una ejecución

Una alternativa no se valida porque una ejecución termine rápido. Debe conservar el resultado, repetir el beneficio con parámetros distintos y mostrar qué aspectos mejoran, cuáles permanecen iguales y cuáles todavía no f

Consultar

Análisis guiado de una consulta empresarial reproducible

Una optimización termina cuando podemos explicar qué necesitaba el negocio, qué trabajo hacía SQL Server, qué cambió y qué falta comprobar. Este caso recorre el proceso completo sin atribuir a una sola ejecución más de l

Consultar