SQL Server: para 3 columnas, diferencia entre "un índice por columna" / "un índice para todos"
Frecuentes
Visto 228 veces
1
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í.
1 Respuestas
2
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 sql-server indexing or haz tu propia pregunta.
¿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: Lamak
Indiferentemente, todos los datos sin procesar entre períodos de tiempo, o todos los grupos por combinaciones entre períodos de tiempo: BuZz