INFORMACIÓN: ¿Por qué muestra SHOWPLAN consulta mediante "Índice dinámico"

Seleccione idioma Seleccione idioma
Id. de artículo: 89387 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Resumen

El comando SET SHOWPLAN ON puede utilizarse para ayudar a analizar cómo el optimizador de consultas de SQL Server es producir un plan de acceso para devolver datos. Este plan de acceso incluye el orden en que el optimizador combina tablas y qué, si hay alguna, índices disponibles hará que se utilizan de. Con algunas consultas, el resultado de SHOWPLAN mostrará que el optimizador tiene acceso a los datos mediante un "índice dinámico". Esto forma parte del optimizador "O estrategia": es decir, cómo optimiza el acceso a los planes para consultas que implican uno o más condiciones OR en la cláusula WHERE.

Más información

Las consultas que implican cláusulas OR no suelen ser muy eficaces en términos acceso a los datos. Por ejemplo, suponga un informe es necesario que incluye todos los libros de la tabla titles que tiene escriba "business" o tiene un precio mayor que 20 $. Suponga que la tabla titles en este ejemplo es una tabla grande con un índice no agrupado en "type" y un índice no agrupado en "precio". La siguiente consulta se podría utilizar para obtener los resultados deseados:
   SELECT title_id, type, price
   FROM pubs..titles
   WHERE type = 'business'
   OR price > $20
				

Hay dos formas que se podrían obtener los datos deseados. Una consiste en iniciar en la primera fila de la tabla, comprobar su tipo y el precio y si cualquiera cumplen los criterios, devolver esa fila, a continuación, desplazarse a la fila siguiente y hacer lo mismo y así sucesivamente. La otra opción es primero encontrar todas las filas que cumplen los criterios del primer "tipo = 'empresa'" y almacenarlos en una tabla intermedia, buscar todas las filas que cumplan el segundo criterio de "precio > 20 ?" y almacenar las filas en la tabla intermedia. Desde su posible (y probablemente) que un libro de negocio puede costar más de 20 ?, es probable tener filas duplicadas en la tabla intermedia, por lo que tendría la tabla intermedia que se busca para eliminar duplicados, y las filas restantes sería los resultados deseados.

El segundo método desde el escenario anterior es muy similar a SQL Server O estrategia. El optimizador de consultas divide la cláusula WHERE en su componente cláusulas OR y evalúa por separado. A continuación, coloca todas los autorizados identificadores de fila en una tabla de trabajo, se ordena la tabla para quitar todas las filas duplicadas y utiliza los identificadores de filas restantes para recuperar rápidamente las filas correctas de las páginas de datos. La tabla de trabajo final que contiene los identificadores de fila autorizado se denomina el índice dinámico. Los identificadores de fila son una representación interna del número de página y el número de fila en esa página de la fila especificada.

Para ilustrar el proceso anterior, suponga que lo siguiente es un subconjunto de la tabla titles (el "ID de fila" es el identificador interno de cada fila, no es una columna real de la tabla).
   Row ID     Title_id   Type        Price
   ---------------------------------------
      1       BU9033     Business    19.00
      2       PS3840     Psychology  28.00
      3       CS1011     Computers   16.00
      4       BU8845     Business    32.00
      5       CO5490     Cooking     14.00
      6       BU7349     Business    26.00
      7       HL7204     Health      41.00
      8       PS2099     Psychology  17.00
				

Si ha decidido el optimizador de consultas de SQL Server evaluar la consulta mediante la estrategia de O, lo primero utilizaría el índice en la columna "tipo" para recuperar todos los identificadores de filas que satisfacen la primera cláusula (tipo = 'empresa'):
   row ID 1
   row ID 4
   row ID 6
				

A continuación, podría utilizar el índice en la columna "precio" para recuperar todos los identificadores de filas que cumplen la segunda cláusula (precio > 20 dólares):
   row ID 2
   row ID 4
   row ID 6
   row ID 7
				

Los resultados de estas dos búsquedas se combinan en una tabla de trabajo único, se ordenan los identificadores de fila y se quitan duplicados:
   row ID 1
   row ID 2
   row ID 4
   row ID 4 <--duplicate removed
   row ID 6
   row ID 6 <--duplicate removed
   row ID 7
				

Por último, SQL Server puede examinar la tabla de trabajo rápidamente y recuperar las filas de las páginas de datos con los identificadores de fila determinada.

SQL Server no se reordena siempre uso la estrategia de o para cada consulta que contenga cláusulas OR. Antes de se decide utilizar la estrategia de O, deben cumplirse las condiciones siguientes:
  • Todas las columnas de la cláusula OR deben pertenecer a la misma tabla.
  • Si alguna parte de la cláusula OR requiere un recorrido de tabla (debido a falta de un índice o poca selectividad de un índice determinado), se utilizará para toda la consulta en lugar de la estrategia o un recorrido de tabla.
  • La decisión de utilizar la estrategia OR se realiza después de todos los índices y se evalúan los costos. Si cualquier plan de acceso es menor costoso (en términos de página E/s), SQL Server elegirá utilizar el plan con el menor costo. En el ejemplo anterior, si un recorrido de tabla recta daría como resultado menos E/s de página sea con la estrategia OR, la consulta podría procesarse como un recorrido de tabla en lugar de utilizar el índice dinámico.
Nota: SQL Server interpreta consultas que utilizan la cláusula IN como si fueran OR. Por ejemplo, supongamos que la siguiente consulta se utiliza para obtener información de título:
   SELECT *
   FROM pubs..titles
   WHERE title_id IN ('BU9033', 'CO5490', 'PS7732')
				

SQL Server se dividen esta consulta para que sea equivalente al siguiente:
   SELECT *
   FROM pubs..titles
   WHERE (title_id = 'BU9033'
   OR title_id = 'CO5490'
   OR title_id = 'PS7732')
				

El optimizador de consultas, a continuación, puede evaluar el costo de utilizar la estrategia o como un plan de acceso para esta consulta.

Propiedades

Id. de artículo: 89387 - Última revisión: viernes, 31 de enero de 2014 - Versión: 1.1
La información de este artículo se refiere a:
  • Microsoft SQL Server 4.21a Standard Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbinfo kbother KB89387 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 89387

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com