Este documento presenta la agenda para una sesión de entrenamiento sobre planes de ejecución en SQL Server. La sesión cubrirá principios básicos como estadísticas, selectividad y cardinalidad, y diferentes operadores como escaneos, búsquedas, unión y ordenamiento. También analizará operadores de unión específicos como bucles anidados, unión hash y unión por mezcla.
4. Operadores
¿Qué son?
α SQL Server posee unos 40 operadores lógicos y físicos
β Algunos muy comunes: nested loops o filter
β Otros menos comunes: Segment, Bitmap, Sequence…
α Todo operador funciona pidiendo filas de uno o mas hijos
y devolviéndolas al que se las ha pedido
β Caso especial Common Table Spool (siguiente sesión)
α Cada operador devuelve de 1 fila en 1 fila
5. Estadísticas
Principios básicos
α Las estadísticas mantienen la información sobre la
distribuición de los datos en una o más columnas
α Mantienen un histograma con un máximo de 200
muestras de datos
α Los datos de las estadísticas son utilizados para escoger el
mejor plan de ejecución
α Todos los índices contienen estatísticas
7. Frecuencia y Densidad
α Frecuencia
β Número medio de duplicados de cada valor en una tabla
α Densidad
β Densidad = 1/frecuencia
β Número de valores únicos de un conjunto de columnas
β Cuanto mayor es el número de la densidad, más densa es su
columna, y más líneas duplicadas contendrá.
1/0.0001 = 10.000 elementos únicos en col1
1/0.00003 = ~33.334 elementos únicos (col1,col2)
SELECT (1.0 / COUNT(DISTINCT <Columna>)) FROM <Tabla>
8. Selectividad
Conceptos básicos
α La selectividad es el % de filas que se estiman cualificadas
por el predicado y devueltas al usuario
α Su valor se basa en el histograma mencionado
anteriormente
α Se usa para estimar el nº de filas que pasaran por cada
operador (estimated number of rows)
SELECT *
FROM Clientes
WHERE Sexo = ‘M’
SELECT *
FROM Clientes
WHERE DNI = ‘12312312312’
Que consulta es más selectiva?
9. Cardinalidad
Conceptos básicos
α Concepto que hay que tener claro
α Numero de elementos (filas) devueltos por un operador
α La cardinalidad de un operador viene definida como:
β (selectividad actual)*(cardinalidad del operador hijo)
β O lo que es lo mismo
γ (% de filas que satisfacen el predicado) * (#filas del predecesor)
10. Resumen
α Densidad
β Medida de cuantos duplicados hay por columna
β Densidad = 1/frecuencia
γ Alta densidad -> poco valor único
α Selectividad
β Tambien es medida de unicidad
γ Alta selectividad -> pocos valores
β Se suele utilizar para representar predicados
α Cardinalidad
β Es el concepto clave que hay que entender y surge de todos los
anteriores
β Número de filas devueltos por un operador
β Esto nos dará idea de por qué no va bien un plan de ejecucion
11. Scan
¿Qué son y para qué sirven?
α Table Scan
α Clustered Index Scan
α Index Scan
α Range Scan
α Merge Interval
12. Table Scan (10 minutos)
Clustered Index Scan
Index Scan
Range Scan
Merge Interval
13. SARGs
¿Qué significa el término SARG?
α Clausulas que ayudan a limitar la cantidad de líneas que
serán devueltas
α Conocidas como sargable u optimizable
α Ejemplos de cláusulas SARGs:
WHERE Nome = 'José'
WHERE Salario > 2500
WHERE 2500 < Salario
WHERE Nome = 'José' AND Salario > 5000
WHERE Nome LIKE 'Fab%'
α Ejemplos de cláusulas NonSargables:
WHERE Nome LIKE ‘%Fab'
WHERE ABS(Preco) > 100
WHERE dbo.FnMask(Col) = ’10.330’
WHERE YEAR(Data) = 2011
14. Seek
¿Qué son y para qué sirven?
α Clustered Index Seek
α Index seek
17. Operadores Join
Nested Loop
αEs el operador mas sencillo
αEs un doble bucle
Pseudo-código:
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
*No confundir inner table con inner join ni outer table com outer join
19. Operadores Join
Nested Loop
Tabla de Cursos: Tabla de Alumnos:
ID_Curso Nombre_Curso ID_Alum Nombre_Aluno ID_Curso
1 Paisajismo 1 Luis 2
2 Fotografía 2 Ana 6
3 Arte Clásico 3 Juan 5
4 Matemáticas 4 Pepe 3
5 Física 5 Carlos 4
6 Química 6 Felipe 3
7 Iratxe 5
8 María 4
Resultado:
Nombre Alumno | Nombre Curso
1-Luis |2-Fotografía
4-Pepe |3-Arte Clásico
6-Felipe |3-Arte Clásico
5-Carlos |4-Matemáticas
8-María |4-Matemáticas
...
20. Operadores Join
Merge Join
αLee simultáneamente las dos entradas
αAmbas entradas deben estar ordenadas
get first row R1 from input 1
get first row R2 from input 2
while not at the end of either input
{
if R1 joins with R2
{
return (R1, R2)
get next row R2 from input 2
}
else if R1 < R2
get next row R1 from input 1
else
get next row R2 from input 2
}
22. Operadores Join
Merge Join
Tabla de Cursos: Tabla de Alumnos:
ID_Curso Nombre_Curso ID_Alum Nombre_Alumno ID_Curso
1 Paisajismo ID_Alunos Luís
1 Nome_Aluno s 2
2 Fotografía 1 Luís
4 Pepe 2
3
3 Arte Clásico 2 Ana
6 Felipe 6
3
4 Matemáticas 3 Juan
5 Carlos 5
4
5 Física 4 Pepe
8 María 3
4
5 Carlos 4
6 Química
6 Felipe 3
7 Iratxe 5
8 María 4
Resultado:
Nombre Alumno | Nombre Curso
1-Luis |2-Fotografía
4-Pepe |3-Arte Clásico
6-Felipe |3-Arte Clásico
5-Carlos |4-Matemáticas
8-María |4-Matemáticas
...
23. Operadores Join
Hash Join
αEjecución en dos fases
β Build: Cálculo de clave hash del inner
β Prueba: Lee la outer, crea su hash y compara con hash precalculado
en fase build
αSi se estima menos memoria para hash, aparecen los
temidos hash warnings…
for each row R1 in the build table
{
calculate hash value on R1 join key(s)
insert R1 into the appropriate hash bucket
}
for each row R2 in the probe table
{
calculate hash value on R2 join key(s)
for each row R1 in the corresponding hash bucket
if R1 joins with R2
return (R1, R2)
}
29. Denali nos ayuda con los Sort
Sort warnings en planes de ejecución
30. Objetivos de la sesión
Agenda
α Principios Básicos
β Estadisticas, selectividad, densidad y cardinalidad
α Operadores Join:
β Loop Join
β Hash Join
β Merge Join
α Operadores básicos
β Scan
γ Table scan, index scan, clustered index scan, range scan
β Seek
γ Clustered index seek, index seek
β Lookup
γ RID, Key
β Sort
31. Si quieres disfrutar de las mejores sesiones de
nuestros mentores de España y Latino América,
ésta es tu oportunidad.
http://summit.solidq.com/madrid/