Índices múltiples versus índices de varias columnas

Resuelto GateKiller asked hace 15 años • 5 respuestas

¿Cuál es la diferencia entre crear un índice en varias columnas y crear varios índices, uno por columna?

¿Existen razones por las que se debería utilizar uno sobre el otro?

Por ejemplo:

Create NonClustered Index IX_IndexName On TableName
(Column1 Asc, Column2 Asc, Column3 Asc)

Versus:

Create NonClustered Index IX_IndexName1 On TableName
(Column1 Asc)

Create NonClustered Index IX_IndexName2 On TableName
(Column2 Asc)

Create NonClustered Index IX_IndexName3 On TableName
(Column3 Asc)
GateKiller avatar Oct 07 '08 22:10 GateKiller
Aceptado

Estoy de acuerdo con Cade Roux .

Este artículo debería llevarlo por el camino correcto:

  • Índices en SQL Server 2005/2008: mejores prácticas, parte 1
  • Índices en SQL Server 2005/2008 – Parte 2 – Componentes internos

Una cosa a tener en cuenta: los índices agrupados deben tener una clave única (una columna de identidad que recomendaría) como primera columna. Básicamente, ayuda a que sus datos se inserten al final del índice y no causen muchas E/S de disco y divisiones de páginas.

En segundo lugar, si está creando otros índices con sus datos y están construidos de manera inteligente, se reutilizarán.

Por ejemplo, imagina que buscas en una tabla en tres columnas.

estado, condado, código postal.

  • a veces se busca solo por estado.
  • a veces se busca por estado y condado.
  • Con frecuencia busca por estado, condado, código postal.

Luego un índice con estado, condado, código postal. se utilizará en las tres búsquedas.

Si busca bastante solo por zip, entonces el índice anterior no será utilizado (de todos modos, por SQL Server) ya que zip es la tercera parte de ese índice y el optimizador de consultas no verá ese índice como útil.

Luego podría crear un índice solo en Zip que se usaría en este caso.

Por cierto, podemos aprovechar el hecho de que con la indexación de varias columnas la primera columna de índice siempre se puede utilizar para realizar búsquedas y cuando se busca solo por "estado" es eficiente, pero no tan eficiente como el índice de una sola columna en "estado". '

Supongo que la respuesta que está buscando es que depende de las cláusulas donde de sus consultas utilizadas con frecuencia y también de su grupo por.

El artículo ayudará mucho. :-)

evilhomer avatar Oct 07 '2008 16:10 evilhomer

Sí. Le recomiendo que consulte los artículos de Kimberly Tripp sobre indexación .

Si un índice "cubre", entonces no es necesario utilizar nada más que el índice. En SQL Server 2005, también puede agregar columnas adicionales al índice que no forman parte de la clave, lo que puede eliminar viajes al resto de la fila.

Tener varios índices, cada uno en una sola columna, puede significar que solo se utiliza un índice; deberá consultar el plan de ejecución para ver qué efectos ofrecen los diferentes esquemas de indexación.

También puede utilizar el asistente de ajuste para ayudar a determinar qué índices harían que una consulta o carga de trabajo determinada tenga el mejor rendimiento.

Cade Roux avatar Oct 07 '2008 15:10 Cade Roux