Será de SQL Server utiliza un índice compuesto, cuando sólo una única columna está en la cláusula WHERE?

StackOverflow https://stackoverflow.com/questions/2228192

Pregunta

Digamos que tengo una tabla:

CREATE TABLE Users (
    Id INT IDENTITY (1, 1),
    FirstName VARCHAR(40),
    LastName VARCHAR(40)
)

Las consultas son por lo general en FirstName o Apellidos , sino también en FirstName y Apellidos .

Si se crea un índice no agrupado en FirstName y otro en Apellidos , entonces mis dos primeras consultas son atendidas. Al parecer, SQL Server utilizará índice de intersección de la otra consulta.

Por otra parte, si tengo indexees en (Nombre) y sobre (apellido, nombre), puede / no utilizar SQL Server el segundo índice de consultas en un solo Apellidos , así como consultas sobre ambos?

¿El índice compuesto de partes tienda de SQL Server de izquierda a derecha o de derecha a izquierda? En otras palabras: va a construir la clave como LastNameFirstName o NombreApellido? O es libre de elegir arbitrariamente?

¿Fue útil?

Solución

  

puede / no utilizar SQL Server el índice (apellido, nombre) para las consultas en apenas Apellido, así como consultas sobre ambos?

Sí, la base de datos utilizará el índice (apellido, nombre) para consultas sobre Apellido. Es no utilizar este índice para consultas sólo en FirstName sin embargo.

  

Lo hace piezas de índice compuesto tienda de izquierda a derecha o de derecha a izquierda?

El almacenaje está en un árbol B . Si usted piensa en él como ser almacenado de derecha a izquierda o simplemente una ayuda útil de visualización de izquierda a derecha es, y no relacionados con el almacenamiento de datos real.

Otros consejos

Sí, si se consulta en Apellidos solo se debe utilizar el índice (Apellido, Nombre). Por lo que sería utilizada tanto cuando se consulta por Apellidos solo, o Apellidos y FirstName juntos.

pauta general es para asegurar la columna con la mayor selectividad aparece primero en el índice compuesto ya que esto proporciona el mayor beneficio / se estrecha el conjunto de resultados abajo antes antes de la siguiente, las columnas menos selectivos.

En función de la consulta real que va a enviar, un índice compuesto en dos columnas se puede utilizar incluso si la búsqueda de la segunda columna única. Sin embargo, no obtendrá una búsqueda de índice, pero lo más probable es una exploración de índice. Si esto es "suficientemente bueno" para usted, depende de su entorno específico. La indexación es más un arte que una ciencia y una gran cantidad de diferentes factores que influyen en su decisión sobre la forma de indexar una tabla. Es siempre una solución de compromiso que tienen demasiados índices en una tabla es tan malo como tener demasiado pocos. Asegúrese de que las consultas más importantes están cubiertos bien y luego decidir sobre una base de caso por caso si cualquier índice adicional es digno de su coste.

Además, ya que no se ha mencionado todavía y siempre estás al menos en SQL Server 2005: permítanme lanzar en la cláusula incluyen por índices no agrupados. Se trata de un alto, pero además muy útil para cualquier estrategia de indexación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top