SQL Server: para 3 columnas, diferencia entre "un índice por columna" / "un índice para todos"

Estoy configurando una tabla simple en SQL Server. Se llama "REGISTRO" y, como es de esperar, se usa para registrar registros, para luego monitorear/buscar/agrupar el uso de varias aplicaciones de varias maneras.

La tabla se declara algo así (sintaxis simple):

LOG {
   user   varchar(8),
   timestamp  datetime,
   appname   varchar(16)
}
primary key(user,timestamp,appname)

¿Debo indexar cada columna en un índice separado? ¿Los tres en el mismo índice? ¿Agrupado/no agrupado?

Me encantaría ver qué lógica/conocimiento aplicarías aquí.

preguntado el 09 de marzo de 12 a las 15:03

¿Cuál es el uso que le vas a dar a esa mesa?. ¿Estarás consultando la mayor parte del tiempo para obtener los registros de un usuario?, ¿una fecha?, ¿un usuario en una fecha?, ¿una aplicación? ... ya sabes a dónde voy:

Indiferentemente, todos los datos sin procesar entre períodos de tiempo, o todos los grupos por combinaciones entre períodos de tiempo:

1 Respuestas

Sugeriría hacer timestamp su índice agrupado... ya que un índice agrupado es particularmente eficiente en columnas en las que a menudo se buscan rangos de valores, y eso parece describir cómo consultará los datos.

Además, asumo que timestamp será secuencial, lo que haría que la inserción de nuevos datos en el índice agrupado fuera menos costosa que si hubiera una distribución aleatoria de los datos que se insertan.

No parece que vayas a buscar por user o por appname, por lo que no recomendaría agregar índices a esas columnas a menos que planee unirse a estos valores o usarlos en su where cláusula en algún lugar del camino.

Usted sugirió agregar los tres campos a su índice, pero cuando haga esto, el índice solo se usará si el "borde principal" está incluido en su búsqueda...

Por ejemplo, si su índice es (user, timestamp, appname), pero solo estás buscando por timestamp y appname, entonces ese índice no se usará. Debido a esto, es muy importante considerar cómo se consultarán los datos al crear sus índices.

respondido 12 mar '12, 22:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.