Las consultas en sql server sargable con ejemplos

en características sql1

La parte más interesante de mi trabajo es la optimización del rendimiento y optimización de T-SQL. El corazón de la optimización del rendimiento en un servidor SQL es correcta indexación y utilizable en las tablas a través del uso de consultas sargable.

A veces, el Senior Bases de Datos en el trabajo me dice que sólo para añadir un índice para una columna XYZ porque está siendo utilizado en múltiples cláusulas WHERE dentro de varias consultas SQL. Eso es cuando necesito para calmar mi mente. Si la adición de un índice en la columna de la XYZ podría resolver todos los problemas de rendimiento, entonces miles de libros no han sido publicados en la optimización del rendimiento de T-SQL, y yo habría ido a cazar para anaconda en la selva tropical del Amazonas.

Sargable consultas (Search Argumentable)

En términos simples, las consultas sargable son aquellos que son capaces de utilizar los índices creados en ellos para búsquedas y ejecución de una consulta más rápida.
Una búsqueda rápida significa hacer un índice eficaz buscan a cabo un gran número de filas y evitar costosas exploraciones de índices.

index Seek - consultas son capaces de utilizar los índices de eficacia y localizar filas con menos esfuerzo por parte del optimizador de consultas.
Exploración de índice - escanear toda la tabla para localizar filas para satisfacer los criterios de búsqueda

¿Qué hace que una consulta no sargable (no poder utilizar los índices creados con eficacia)?

1. uso de funciones en caso de condiciones de la Cláusula (debido a una función se evalúa en cada fila que obliga al optimizador de consultas no utilizar el índice)
2. usando LIKE `% Propuesta%` en las consultas de búsqueda comodín
3. realizar el cálculo aritmético en una columna de índice en una cláusula WHERE

Vamos a crear y rellenar una tabla con 0,1 millones de filas para ver cómo hacer consultas sargable.

Este script tomaría tiempo para crear datos de la muestra en base a su configuración de hardware (3-5 minutos).

-- Crear una tabla con clave primariaCREAR MESA EmployeeTest (int id IDENTIDAD(1, 1) PRIMARIO LLAVE,Salario INT, DateOfBirth DATETIME, EmployeeName VARCHAR (80)) -IR-- Insertar filas con valores aleatoriosDECLARAR @fila INT -DECLARAR @string VARCHAR (80), @longitud INT, INT @codeCONJUNTO @fila = 0, mientras @fila < 100000 EMPEZARCONJUNTO @fila = @fila + 1-SI @fila = 10000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 20000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 30000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 40000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 50000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 60000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 70000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 80000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 90000PRINT `Filas insertadas:`+CONVERTIR (VARCHAR (20), @fila )-SI @fila = 100000PRINT `Hecho, filas insertadas:`+CONVERTIR (VARCHAR (20), @fila ) --- Construir la cadena aleatoriaCONJUNTO @longitud = ROUND (80 * RAND (), 0) -CONJUNTO @string = `` -MIENTRAS @longitud > 0 EMPEZARCONJUNTO @longitud = @longitud - 1 -CONJUNTO @code = ROUND (32 * RAND (), 0) - 6 -SI @code ENTRE 1 Y 26CONJUNTO @string = @string + CHAR (ASCII (`un`) + @ Código-1) -MÁSCONJUNTO @string = + @string ``-FIN-- Listo para el registroCONJUNTO NO CUENTA EN -INSERTAR DENTRO EmployeeTest VALORES (REDONDO (2000000 * RAND () + 10000,0),CONVERTIR(DATETIME, ROUND (60000 * RAND () - 30000, 9)), @ cadena)FINIR

» » Las consultas en sql server sargable con ejemplos