Índice de SQL Server orden de las columnas de optimización del rendimiento para la orden de

RealPro:

Tengo la siguiente consulta:

select top 500 * from clicks 
where domainid = 'AC8BBCA4-1CC4-456E-9A85-E7A5C0D7E981' 
order by clickedOn

Me pregunto qué índice se obtienen mejores resultados?

CREATE NONCLUSTERED INDEX [IX_p2p] ON [dbo].[clicks]
(
    [domainId],
    [clickedOn] ASC
)

¿O esto?

CREATE NONCLUSTERED INDEX [IX_p2p] ON [dbo].[clicks]
(
    [clickedOn] ASC,
    [domainId]
)
Martin Smith:

El primer índice es claramente mejor que el segundo para esta consulta.

En el primer caso se puede buscar en el exacto domainidy luego leer las primeras 500 filas, las cuales ya están en clickedOnorden, y luego parada (más de 500 operaciones de búsqueda para obtener los otros valores de la columna si la tabla tiene más de las dos columnas se muestra).

El segundo índice podría ser útil para la consulta pero sólo en circunstancias muy limitadas. Evita la necesidad de ordenar clickedOnpero requiere examine el índice en orden y parar después de las primeras 500 filas que coinciden con el domainIdse encuentran. Si usted es muy afortunado entonces las primeras 500 filas en clickedOnorden también coincidir con el domainIdpredicado por lo que también tiene que leer solamente 500 filas. Pero lo más probable es que esto no será el caso. En el peor de los casos ni siquiera hay 500 filas coincidentes que se encuentran y se tiene que leer todo el índice. También lo tiene que hacer las operaciones de búsqueda 500 para obtener los otros valores de la columna.

Si la tabla es relativamente pequeña que, ni índice puede ser utilizado como SQL Server puede decidir la exploración de un índice de cobertura y la clasificación es más barato que los 500 búsquedas.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=406350&siteId=1
Recomendado
Clasificación