You are on page 1of 19

Anlisis de Consultas

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

Notas para el instructor


Este mdulo proporciona a los alumnos un conocimiento profundo de la forma en que el optimizador de consultas de Microsoft SQL Server 2000 evala y procesa las consultas que contienen los operadores AND y OR as como las operaciones de combinacin y si los alumnos deben omitir el optimizador de consultas. En las prcticas los alumnos ejecutarn varias consultas y analizarn cmo el optimizador de consultas procesa las consultas que contienen los operadores lgicos AND y OR. Los alumnos tambin analizarn cmo se procesan las combinaciones de bucle anidado, mezcla y hash. Despus de completar este mdulo, los alumnos sern capaces de:

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.

Despus de realizar esta prctica, el alumno ser capaz de:

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

Consultas que utilizan el operador AND


Objetivo del tema
Describir cmo se optimiza una consulta que contiene el operador AND.

Procesamiento del operador AND


z

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.

Directrices de indizacin y consideraciones de rendimiento


z

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.

Procesamiento del operador AND


Cuando una consulta contiene el operador AND, el optimizador 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. 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.

Directrices de indizacin y consideraciones de rendimiento


La mejor forma de indizar para consultas que contienen el operador AND es disponer, como mnimo, de un criterio de bsqueda altamente selectivo y definir un ndice en dicha columna. Es recomendable comparar la diferencia de rendimiento al crear varios ndices de una columna y un ndice compuesto. El rendimiento de las consultas no mejora necesariamente con la indizacin de todas las columnas que forman parte del operador AND. Sin embargo, se puede obtener ventaja de tener varios ndices si las columnas a las que hace referencia el operador AND son de selectividad ms baja.

Anlisis de Consultas

Consultas que utilizan el operador OR


Objetivo del tema
Describir cmo se optimiza una consulta que contiene el operador OR.

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

Consultas que utilizan operaciones de combinacin


Objetivo del tema
Presentar los temas de esta seccin.

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

Selectividad y densidad de una clusula JOIN


Objetivo del tema
Describir la selectividad y la densidad de una clusula JOIN.

Selectividad de una clusula JOIN


Porcentaje de filas devueltas
z

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

Densidad de una clusula JOIN


z

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.

Selectividad de una clusula JOIN


La selectividad de una clusula JOIN es el porcentaje de filas de una tabla que se combinan en una nica fila de otra. La selectividad se deriva del nmero de filas previstas que se devolvern, como se ve con la clusula WHERE. Una selectividad baja devuelve muchas filas y una selectividad alta devuelve menos. La base es la multiplicacin de las filas en ambas tablas despus de aplicar los predicados locales (clusula WHERE) en las agregaciones y tablas combinadas. Este algoritmo es distinto del que se utiliza para determinar cuntas filas cumplen una condicin de bsqueda.

Cmo se determina la selectividad de una clusula JOIN


Puede calcular la selectividad de una clusula JOIN mediante la densidad de los datos. El optimizador de consultas determina la selectividad de una clusula JOIN segn los siguientes parmetros:

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

Densidad de una clusula JOIN


La densidad de una clusula JOIN es el porcentaje promedio de duplicados entre las tablas internas y externas. El optimizador de consultas utiliza la densidad de una clusula JOIN para determinar la tabla que se procesar como interna y la que se procesar como externa.

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

Cmo se procesan las combinaciones


Objetivo del tema
Ilustrar cmo el optimizador de consultas procesa una combinacin.
USE USE credit credit SELECT SELECT m.member_no, m.member_no, c.charge_no, c.charge_no, c.charge_amt, c.charge_amt, c.statement_no c.statement_no FROM FROM member member AS AS m m INNER INNER JOIN JOIN charge charge AS AS c c ON ON m.member_no m.member_no = = c.member_no c.member_no WHERE WHERE c.member_no c.member_no = = 5678 5678

Explicacin previa

Veamos cmo el optimizador de consultas procesa una combinacin.

ndice no agrupado nico member member


member_no member_no

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

ndice no agrupado charge charge


charge_no charge_no member_no member_no

(13 filas afectadas)

.. .. .. 15259 15259 .. .. .. 16351 16351 .. .. .. 17673 17673 .. .. ..

.. .. .. 5678 5678 .. .. .. 5678 5678 .. .. .. 5678 5678 .. .. ..

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

Evaluacin del uso de ndices


La selectividad y la densidad de una clusula JOIN afecta al tipo de ndice que resulta ms til para procesar la consulta.

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

Cmo se procesan las combinaciones de bucle anidado


Objetivo del tema
Describir cmo se procesan las combinaciones anidadas.
USE USE credit credit SELECT SELECT m.member_no, m.member_no, c.charge_no, c.charge_no, c.charge_amt, c.charge_amt, s.statement_no s.statement_no FROM FROM member member AS AS mm INNER INNER JOIN JOIN charge charge AS AS cc ON m.member_no = c.member_no ON m.member_no = c.member_no INNER INNER JOIN JOIN statement statement AS AS ss ON ON c.member_no c.member_no == s.member_no s.member_no WHERE WHERE m.member_no m.member_no == 5678 5678

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 .. .. ..

.. .. .. 5678 5678 15678 15678 .. .. ..

1 1 Recupera las filas correspondientes de ambas tablas y las combina

2 2 Combina el resultado con las filas correspondientes de la tabla charge

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.

Definicin de iteracin anidada


Una iteracin anidada se produce cuando el optimizador de consultas construye un conjunto de bucles y el conjunto de resultados crece a media que avanza por las filas. El optimizador de consultas realiza los siguientes pasos: 1. Busca una fila de la primera tabla. 2. Utiliza dicha fila para recorrer la tabla siguiente. 3. Utiliza el resultado de la tabla anterior para recorrer la tabla siguiente.

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

Evaluacin del costo del rendimiento de las consultas


Cuando el optimizador de consultas realiza una combinacin debe tener en cuenta que se producen determinados costos. Las combinaciones de bucle anidado son superiores a las combinaciones de mezcla y a las combinaciones hash cuando se ejecutan transacciones pequeas, como, por ejemplo, la que slo afectan a un pequeo conjunto de filas. El optimizador de consultas:

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

Cmo se procesan las combinaciones de mezcla


Objetivo del tema
Describir cmo se procesan las combinaciones de mezcla.

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

En esta presentacin, ver cmo se procesan las combinaciones de mezcla.

Anlisis de Consultas

13

Consideraciones acerca del uso de combinaciones de mezcla


Objetivo del tema
Presentar los detalles de la operacin de combinacin de mezcla.

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

Consideraciones acerca del rendimiento


USE USE credit credit SELECT SELECT m.lastname, m.lastname, p.payment_amt p.payment_amt FROM FROM member member AS AS m m INNER INNER JOIN JOIN payment payment AS AS p p ON ON m.member_no m.member_no = = p.member_no p.member_no WHERE WHERE p.payment_amt p.payment_amt < < 7000 7000 AND AND m.firstname m.firstname < < 'Jak' 'Jak'

Una mezcla utiliza dos entradas ordenadas y, a continuacin, las mezcla.

Requiere que las columnas combinadas estn ordenadas


Si ejecuta una consulta con operaciones de combinacin y las columnas combinadas estn ordenadas, el optimizador de consultas procesa la consulta mediante una estrategia de combinacin de mezcla. Una combinacin de mezcla es muy eficiente ya que las columnas ya estn ordenadas y requiere menos operaciones de E/S de pgina.

Evala valores ordenados


Para que el optimizador de consultas pueda utilizar la combinacin de mezcla, las entradas deben estar ordenadas. El optimizador de consultas evala los valores ordenados en el orden siguiente: 1. Utiliza un ndice del rbol existente (lo ms habitual). El optimizador de consultas puede utilizar el ndice del rbol de un ndice agrupado o un ndice no agrupado tratado. 2. Aprovecha las operaciones de ordenacin que utilizan las clusulas GROUP BY, ORDER BY y CUBE. La operacin de ordenacin slo se tiene que efectuar una vez. 3. Realiza su propia operacin de ordenacin en la que aparece un operador SORT cuando se muestra grficamente el plan de ejecucin. El optimizador de consultas realiza esta operacin en muy pocas ocasiones.

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

Consideraciones acerca del rendimiento


Tenga en cuenta los siguientes hechos acerca del uso que hace el optimizador de consultas de la combinacin de mezcla:

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

Cmo se procesan las combinaciones hash


Objetivo del tema
Describir cmo se procesan las combinaciones hash.
Entrada de sonda member_no member_no 1 1 .. .. .. 9817 9817 .. .. .. Entrada de generacin Bucket Buckethash hash Filas Filasde dedatos datos 9817 DeBroux 9817 DeBroux .. .. .. 10686 10686 Zuvel Zuvel .. .. .. 8342 8342 Hjellen Hjellen .. .. ..

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

.. .. ..

member_no lastname lastname Resultado member_no 9817 DeBroux 9817 DeBroux

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.

Cundo se utiliza una combinacin hash


El optimizador de consultas utiliza una combinacin hash cuando considera que es ms eficiente que procesar las consultas mediante una combinacin de bucle anidado o de mezcla. Normalmente utiliza una combinacin hash cuando no existe un ndice o los ndices existentes no resultan tiles.

Asigna una entrada de generacin y sonda


El optimizador de consultas asigna una entrada de generacin y sonda. Si el optimizador de consultas asigna incorrectamente la generacin y entrada de sonda (puede suceder a causa de previsiones de densidad imprecisas), las invierte dinmicamente. Esta posibilidad de cambiar las funciones de entrada dinmicamente se denomina inversin de funciones. La entrada de generacin consta de los valores de columna de una tabla con el nmero menor de filas. La entrada de generacin crea una tabla hash en memoria para almacenar estos valores.

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.

Procesamiento de una combinacin hash


La lista siguiente es una descripcin simplificada de cmo el optimizador de consultas procesa una combinacin hash. No pretende ser extensa ya que el algoritmo es muy complejo. SQL Server: 1. Lee la entrada de sonda. Cada entrada de sonda se procesa fila a fila. 2. Realiza el algoritmo hash en cada entrada de sonda y genera un valor clave hash. 3. Busca el bucket hash que coincide con el valor clave hash. 4. Obtiene acceso al bucket hash y busca la fila que cumple la condicin. 5. Devuelve la fila si encuentra una coincidencia.

Consideraciones acerca del rendimiento


Tenga en cuenta los siguientes hechos acerca de las combinaciones hash que utiliza el optimizador de consultas:

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.

You might also like