Professional Documents
Culture Documents
Contenido Introduccin Consultas que utilizan el operador AND Consultas que utilizan el operador OR Consultas que utilizan operaciones de combinacin 1 2 4 5
Anlisis de Consultas
Analizar la ganancia de rendimiento de escribir consultas eficientes y crear ndices tiles para consultas que contengan el operador lgico AND. Analizar la ganancia de rendimiento de escribir consultas eficientes y crear ndices tiles para consultas que contengan el operador lgico OR. Evaluar de qu forma el optimizador de consultas utiliza distintas estrategias de combinacin para la optimizacin de consultas.
Anlisis de Consultas
Introduccin
Objetivo del tema
Proporcionar una introduccin a los temas y objetivos del mdulo.
Consultas que utilizan el operador AND Consultas que utilizan el operador OR Consultas que utilizan operaciones de combinacin
Explicacin previa
En este mdulo aprender la forma en que el optimizador de consultas procesa los operadores lgicos AND y OR, y cmo utiliza distintas estrategias de combinacin.
Analizar la ganancia de rendimiento de escribir consultas eficientes y crear ndices tiles para consultas que contengan el operador lgico AND. Analizar la ganancia de rendimiento de escribir consultas eficientes y crear ndices tiles para consultas que contengan el operador lgico OR. Evaluar de qu forma el optimizador de consultas utiliza distintas estrategias de combinacin para la optimizacin de consultas.
Anlisis de Consultas
Devuelve las filas que cumplen todas las condiciones de cada criterio especificado en la clusula WHERE Limita de forma progresiva el nmero de filas devueltas con cada condicin de bsqueda adicional Puede utilizar un ndice por cada condicin de bsqueda de la clusula WHERE Definir un ndice en un criterio de bsqueda altamente selectivo Evaluar el rendimiento entre crear varios ndices de una columna y un ndice compuesto
Explicacin previa
La forma en que el optimizador de consultas procesa el operador AND depende de si existen ndices en algunas o todas las columnas a las que se hace referencia en la clusula WHERE.
La forma en que el optimizador de consultas procesa el operador AND depende de si existen ndices en algunas o todas las columnas a las que se hace referencia en la clusula WHERE.
Devuelve las filas que cumplen todas las condiciones de cada criterio especificado en la clusula WHERE. Limita de forma progresiva el nmero de filas devueltas con cada condicin de bsqueda adicional. Puede utilizar un ndice por cada condicin de bsqueda de la clusula WHERE. Siempre utiliza un ndice si ste es til. Si los ndices no son tiles para ninguna columna de la clusula WHERE, el optimizador de consultas realiza un recorrido de tabla o de ndice agrupado.
Puede utilizar varios ndices si son tiles. Si hay varios ndices y algunos son tiles para alguna columna de la clusula WHERE, el optimizador de consultas determina la combinacin de ndices que se utilizar. El plan de ejecucin puede mostrar que uno o la mayora de los ndices se utilizaron para procesar la consulta. La combinacin de ndices est determinada por: La selectividad de la bsqueda. El tipo de ndices que existen, como agrupados o no agrupados. Posibilidad de tratar el ndice. Existencia de una vista indizada.
Anlisis de Consultas
Puede utilizar un nico ndice incluso si existen varios tiles. Si el optimizador de consultas encuentra un ndice que es altamente selectivo, utiliza dicho ndice. A continuacin, usa la operacin de filtro para procesar las condiciones de bsqueda restantes en las filas que cumplen la condicin.
Anlisis de Consultas
Devuelve las filas que cumplen cualquier condicin de cada criterio especificado en la clusula WHERE Aumenta de forma progresiva el nmero de filas devueltas con cada condicin de bsqueda adicional Puede utilizar un ndice o ndices diferentes para cada parte del operador OR Siempre realiza un recorrido de tabla o de ndice agrupado si una columna a la que se hace referencia en el operador OR no tiene un ndice o si ste no es til Puede utilizar varios ndices
Explicacin previa
La forma en que el optimizador de consultas procesa el operador OR tambin depende de si existen ndices en algunas o todas las columnas a las que se hace referencia en la clusula WHERE.
La forma en que el optimizador de consultas procesa el operador OR tambin depende de si existen ndices en algunas o todas las columnas a las que se hace referencia en la clusula WHERE. Cuando una consulta contiene el operador OR, el optimizador de consultas:
Devuelve las filas que cumplen cualquier condicin de cada criterio especificado en la clusula WHERE. Aumenta de forma progresiva el nmero de filas devueltas con cada condicin de bsqueda adicional. Puede utilizar un ndice que cumpla todas las partes del operador OR o utiliza ndices distintos para cada parte del operador OR. Siempre realiza un recorrido de tabla o de ndice agrupado si una columna a la que se hace referencia en el operador OR no tiene un ndice o si ste no es til. Si hay varios ndices y todos son tiles, el optimizador de consultas: Busca en una tabla mediante un ndice para cada columna. Ordena los valores que cumplen la condicin para cada columna. Combina los resultados. Recupera las filas que cumplen la condicin mediante la operacin de bsqueda de marcadores.
Anlisis de Consultas
Explicacin previa
Selectividad y densidad de una clusula JOIN Cmo se procesan las combinaciones Cmo se procesan las combinaciones de bucle anidado Presentacin multimedia: Cmo se procesan las combinaciones de mezcla Consideraciones acerca del uso de combinaciones de mezcla Cmo se procesan las combinaciones hash
En esta seccin describiremos las optimizaciones de consultas que utilizan operaciones de combinacin.
En esta seccin describiremos cmo el optimizador consultas optimiza las consultas que utilizan operaciones de combinacin.
Anlisis de Consultas
Explicacin previa
El orden en que el optimizador de consultas procesa las combinaciones viene determinado por la existencia de ndices y una clusula WHERE, adems de la selectividad y densidad de los datos.
Si las estadsticas estn disponibles, se basa en la densidad del ndice Si las estadsticas no estn disponibles, se basa en el nmero de consideraciones Un ndice con un gran nmero de duplicados tiene alta densidad Un ndice nico tiene baja densidad
Selectividad
El orden en que el optimizador de consultas procesa las combinaciones viene determinado por la existencia de ndices y una clusula WHERE, adems de la selectividad y densidad de los datos. Sugerencia
Utilice la ilustracin de la diapositiva para reiterar que una selectividad baja devuelve muchas filas y una selectividad alta devuelve menos.
Si las estadsticas estn disponibles, la selectividad de combinacin se basa en la densidad del ndice para todas las columnas. Si las estadsticas no estn disponibles porque no existen ndices, los ndices existentes no resultan tiles o si no se incluye una clusula WHERE en la consulta, el optimizador de consultas procesa la misma de forma ms eficiente mediante: Aplicacin de una estrategia de combinacin adecuada. Uso de otros operadores fsicos. Generacin de estadsticas de columna dinmicamente. El nmero de filas en cada tabla de la combinacin.
Sugerencia
Seale las consideraciones que el optimizador de consultas estima para determinar la selectividad de una clusula JOIN cuando no estn disponibles las caractersticas.
Anlisis de Consultas
Un ndice con un gran nmero de duplicados tiene una alta densidad de combinacin, lo que no resulta muy selectivo para las combinaciones. Por ejemplo, la tabla orders_details contiene muchos pedidos para un solo cliente.
Un ndice nico tiene una baja densidad de combinacin, por lo que es altamente selectivo. Por ejemplo, la tabla customer slo enumera una vez cada cliente. La columna customer ID es nica.
Si un ndice tiene una baja densidad de combinacin, el optimizador puede tener acceso a los datos mediante un ndice agrupado o no agrupado. Sin embargo, slo un ndice agrupado normalmente resulta til para ndices con una alta densidad de combinacin. Ejemplo En este ejemplo utilice los siguientes supuestos para determinar cmo el optimizador de consultas produce un plan de ejecucin:
La tabla employee contiene 1.000 filas. La tabla department contiene 100 miembros filas (departamentos nicos). Los datos estn distribuidos de forma uniforme (10 empleados por departamento). No hay ndices ni estadsticas.
USE credit SELECT * FROM department AS dept INNER JOIN employee AS empl ON dept.deptno = empl.deptno
Cuando no existen ndices en las columnas que estn combinadas, el optimizador de consultas utiliza una estrategia de combinacin que determina la tabla externa y la tabla interna. Lo realiza mediante la evaluacin de la proporcin de filas entre las tablas. Si hay alguna condicin de bsqueda en la clusula WHERE, el optimizador de consultas puede utilizarlas en primer lugar para determinar cmo combinar las tablas. Esta determinacin se basa en la selectividad.
Anlisis de Consultas
Explicacin previa
Resultado
member_no member_no charge_no charge_no
.. .. .. 5678 5678 .. .. ..
.. .. .. Chen Chen .. .. ..
5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678
30257 30257 17673 17673 15259 15259 16351 16351 32778 32778 48897 48897 60611 60611 66794 66794 74396 74396 76840 76840 86173 86173 87902 87902 99607 99607
Sugerencia
Indique que el optimizador de consultas convierte los criterios de bsqueda en la clusula WHERE de modo que la tabla member sea la tabla externa. Explique que, mediante esta conversin, el optimizador de consultas limita la bsqueda. Limita la bsqueda porque la tabla member slo tiene una fila que cumple la condicin, mientras que la tabla charge tiene muchas filas.
La comprensin de cmo el optimizador de consultas procesa las operaciones de combinacin le permitir determinar los tipos de ndices que resultan tiles crear. Las combinaciones se procesan como parejas. Independientemente de las tablas que combine, las combinaciones siempre se realizan entre dos tablas. El resultado de estas combinaciones se denomina resultado intermedio. A continuacin, los resultados intermedios se pueden combinar con otra tabla mediante cualquier algoritmo de combinacin. Para cada combinacin, el optimizador de consultas determina el algoritmo de combinacin adecuado que se utilizar. Al procesar operaciones de combinacin, el optimizador de consultas normalmente:
Determina el orden en que se procesan las tablas, basado en ndices, selectividad y densidad. El orden no se determina por el orden de la tabla a la que se hace referencia en la instruccin SELECT.
Identifica la tabla que resulta ptima como tabla externa. Busca todas las filas coincidentes en la tabla interna para cada fila que cumpla la condicin en la tabla externa.
Anlisis de Consultas
Un ndice en la columna que est especificada en la clusula WHERE puede influir en la tabla que se utiliza como tabla externa y la estrategia de combinacin que se utiliza. La selectividad determina qu tabla es la interna. El optimizador de consultas considera automticamente el uso de clusulas JOIN redundantes y las condiciones en la clusula WHERE.
Ejemplo
En este ejemplo hay un ndice nico no agrupado en la columna member_no en la tabla member y un ndice no agrupado en la columna member_no en la tabla charge. Ambos ndices resultan tiles para procesar la consulta.
USE credit SELECT m.member_no, c.charge_no, c.charge_amt, c.statement_no FROM member AS m INNER JOIN charge AS c ON m.member_no = c.member_no WHERE c.member_no = 5678
El optimizador de consultas convierte el criterio de bsqueda en la clusula WHERE de modo que la consulta se procese como: WHERE m.member_no = 5678 Al convertir la tabla member en la tabla externa, el optimizador de consultas limita la bsqueda, ya que la tabla member slo tiene una nica fila que cumple la condicin, mientras que la tabla charge tiene muchas filas.
Anlisis de Consultas
10
Explicacin previa
Si hay una clusula JOIN en la consulta, el optimizador de consultas evala el nmero de tablas, ndices y combinaciones para determinar el orden ptimo y la estrategia de combinacin que se utilizar.
member member
member_no member_no
statement statement
statement_no statement_no member_no member_no
charge charge
.. .. .. 5678 5678 5678 5678 .. .. .. .. .. .. .. .. .. .. ..
charge_no charge_no .. .. .. 15259 15259 .. .. .. 16351 16351 .. .. .. 17673 17673 .. .. .. member_no member_no .. .. .. 5678 5678 .. .. .. 5678 5678 .. .. .. 5678 5678 .. .. ..
.. .. .. 5678 5678 .. .. ..
.. .. .. Chen Chen .. .. ..
Si hay una clusula JOIN en la consulta, el optimizador de consultas evala el nmero de tablas, ndices y combinaciones para determinar el orden ptimo y la estrategia de combinacin que se utilizar. El optimizador de consultas procesa las combinaciones de bucle anidado como iteraciones anidadas.
Evaluacin de combinaciones
El optimizador de consultas evala al menos cuatro o ms posibles combinaciones, incluso si no estn especificas en el predicado de combinacin. No tiene que agregar clusulas redundantes. El optimizador de consultas equilibra el costo y utiliza estadsticas para determinar el nmero de combinaciones que evala. La evaluacin de todas las combinaciones posibles es ineficiente y costosa.
Anlisis de Consultas
11
Utiliza combinaciones de bucle anidado si la entrada externa es bastante pequea y la entrada interna est indizada y es bastante grande. Utiliza la entrada menor como la tabla externa. Requiere que exista un ndice til en el predicado de combinacin para la tabla interna. Siempre utiliza una estrategia de combinacin de bucle anidado si la operacin de combinacin utiliza un operador que no sea de igualdad.
Ejemplo
En este ejemplo, la tabla member (10.000 filas) se combina con la tabla charge (100.000 filas) y la tabla charge se combina con la tabla statement (20.000 filas). Hay ndices no agrupados en la columna member_no en cada tabla. El optimizador de consultas procesa la combinacin con la tabla member combinada con la tabla statement y el resultado de dicha combinacin se combina con la tabla charge.
USE credit SELECT m.member_no, c.charge_no, c.charge_amt, s.statement_no FROM member AS m INNER JOIN charge AS c ON m.member_no = c.member_no INNER JOIN statement AS s ON c.member_no = s.member_no WHERE m.member_no = 5678
El optimizador de consultas realiza los siguientes pasos para procesar la consulta: 1. Recupera las filas que cumplen la condicin de las tablas member y statement; a continuacin, combina el resultado mediante la estrategia de combinacin de bucle anidado. 2. Recupera las filas que cumplen la condicin de la tabla charge y, a continuacin, combina dicho resultado con el obtenido de la primera combinacin de bucle anidado mediante otra estrategia de combinacin de bucle anidado.
Anlisis de Consultas
12
Las columnas de las condiciones de combinacin se utilizan como entrada para procesar una combinacin de mezcla. SQL Server lleva a cabo los pasos siguientes cuando utiliza una estrategia de combinacin de mezcla: 1. Obtiene los primeros valores de entrada de cada conjunto de entrada. 2. Compara los valores de entrada. 3. Realiza un algoritmo de mezcla. Si los valores de entrada son iguales, se devuelven las filas. Si son distintos, se descarta el valor menor y el siguiente valor de dicha entrada se utiliza para la siguiente comparacin. 4. Repite el proceso hasta que se procesan todas las filas de uno de los conjuntos de entrada. 5. Evala las condiciones de bsqueda restantes de la consulta y slo devuelve las filas que cumplen la condicin. Nota Slo se realiza un paso por cada entrada. La operacin de combinacin de mezcla finaliza despus de que se hayan evaluado todos los valores de una entrada. Los valores restantes de la otra entrada no se evalan.
Explicacin previa
Anlisis de Consultas
13
Requiere que las columnas combinadas estn ordenadas Evala valores ordenados
z z z
Explicacin previa
Una combinacin de mezcla utiliza dos entradas ordenadas y, a continuacin, las mezcla.
Utiliza un ndice del rbol existente Aprovecha las operaciones de ordenacin Realiza su propia operacin de ordenacin
Anlisis de Consultas
14
Ejemplo 1
En este ejemplo existe un ndice agrupado en la columna member_no de la tabla payment y un ndice agrupado nico en la columna member_no de la tabla member. El optimizador de consultas recorre la tabla member y la tabla payment mediante el ndice agrupado de cada tabla. Tras recorrer el contenido de cada tabla, el optimizador de consultas realiza una combinacin de mezcla entre ambas tablas, ya que las dos entradas ya estn ordenadas mediante los ndices agrupados. Se trata de una combinacin de mezcla/combinacin interna.
USE credit SELECT m.lastname, p.payment_amt FROM member AS m INNER JOIN payment AS p ON m.member_no = p.member_no WHERE p.payment_amt < 7000 AND m.firstname < 'Jak'
Ejemplo 2
En este ejemplo existe un ndice agrupado nico en la columna member_no de la tabla member y la consulta especifica de forma explcita una clusula ORDER BY en la columna member_no de la tabla payment.
USE credit SELECT m.lastname, m.firstname, p.payment_dt FROM member AS m INNER JOIN payment AS p ON m.member_no = p.member_no ORDER BY p.member_no
SQL Server realiza una combinacin de mezcla para todos los tipos de operaciones de combinacin (excepto las operaciones de combinacin cruzadas o completas), incluidas las operaciones UNION. Una operacin de combinacin de mezcla puede ser una operacin de uno a uno, uno a varios o varios a varios. Si la combinacin de mezcla es una operacin de varios a varios, SQL Server utiliza una tabla temporal para almacenar las filas. Si hay valores duplicados de cada entrada, una de las entradas vuelve al principio de los duplicados a medida que se procesa un valor duplicado de la otra entrada.
El rendimiento de consulta de una combinacin de mezcla es muy rpido, pero el costo puede ser alto si el optimizador de consultas debe realizar su propia operacin de ordenacin. Si el volumen de datos es grande y los datos deseados se pueden obtener ya ordenados de los ndices de rbol B (rbol equilibrado) existentes, la combinacin de mezcla suele ser el algoritmo de combinacin ms rpido.
La combinacin de mezcla normalmente se utiliza si las dos entradas de combinacin tienen una gran cantidad de datos y estn ordenadas en sus columnas de combinacin (por ejemplo, si las entradas de combinacin se han obtenido mediante el recorrido de ndices ordenados). Las operaciones de combinacin de mezcla slo se pueden realizar con un operador de igualdad en el predicado de combinacin.
Anlisis de Consultas
15
Explicacin previa
El optimizador de consultas utiliza una combinacin hash cuando considera que esta opcin es ms eficiente que procesar las consultas mediante una combinacin de bucle anidado o de mezcla.
Claves hash
xxx xxx zzz zzz yyy yyy nnn nnn .. .. ..
xxx
yyy
.. .. ..
La aplicacin del algoritmo hash es una estrategia para dividir los datos en conjuntos iguales con un tamao fcil de administrar segn una determinada propiedad o caracterstica. Los datos agrupados se pueden utilizar para determinar si un elemento de datos concreto coincide con un valor existente. Nota Los datos duplicados o los intervalos de datos no resultan tiles para las combinaciones hash ya que los datos no estn organizados de forma conjunta o en orden.
Anlisis de Consultas
16
El bucket hash es un lugar de almacenamiento en la tabla hash en que se inserta cada fila de la entrada de generacin. Las filas de una de las tablas de combinacin se colocan en el bucket hash donde el valor clave hash de la fila coincide con el valor clave hash del bucket. Los buckets hash se almacenan como una lista vinculada y slo contienen las columnas que son necesarias para la consulta. Una tabla hash contiene buckets hash. La tabla hash se crea a partir de la entrada de generacin. La entrada de sonda consta de los valores de columna de la tabla que tiene ms filas. La entrada de sonda es lo que comprueba la entrada de generacin para buscar una coincidencia en los buckets hash. Nota El optimizador de consultas utiliza estadsticas de columna o ndice para determinar cul de las dos entradas es la menor.
Al igual que las combinaciones de mezcla, una combinacin hash es muy eficiente ya que utiliza buckets hash, que son como un ndice dinmico pero con menos carga de trabajo para combinar filas. Las combinaciones hash se pueden realizar para todos los tipos de operaciones de combinacin (excepto las operaciones de combinacin cruzadas), incluidas las operaciones UNION y DIFFERENCE. Un operador hash puede quitar duplicados y agrupar datos, como SUM (salary) GROUP BY department. El optimizador de consultas slo utiliza una entrada para las funciones de generacin y sonda. Si las entradas de la combinacin son grandes y de tamao similar, el rendimiento de la operacin de combinacin hash es parecido a una combinacin de mezcla con ordenacin anterior. Sin embargo, si el tamao de las entradas de la combinacin es ligeramente distinto, el rendimiento de una combinacin hash es, a menudo, mucho ms rpido.
Anlisis de Consultas
17
Las combinaciones hash pueden procesar, de forma eficiente, entradas grandes, sin ordenar y sin indizar. Las combinaciones hash resultan tiles en consultas complejas porque los resultados intermedios: No estn indizados (a menos que se guarden directamente en disco y se indicen posteriormente). No suelen estar ordenados para la siguiente operacin del plan de ejecucin.
El optimizador de consultas puede identificar las previsiones incorrectas y realizar correcciones dinmicamente para procesar la consulta ms eficientemente. Una combinacin hash reduce la necesidad de desnormalizacin de la base de datos. La desnormalizacin normalmente se utiliza para obtener mejor rendimiento mediante la reduccin de las operaciones de combinacin a pesar de la redundancia, como las actualizaciones incoherentes. Las combinaciones hash permiten crear particiones verticales de los datos como parte del diseo de la base de datos fsica. Las particiones verticales representan grupos de columna de una nica tabla en archivos o ndices independientes.
Nota Para obtener informacin acerca de las combinaciones hash, busque explicacin de las combinaciones hash en los Libros en pantalla de SQL Server.