2010-10-28 8 views
7
pregunta

Rendimiento sobre la indexación de grandes cantidades de datos. Tengo una tabla grande (~ 30 millones de filas), con 4 de las columnas indexadas para permitir una búsqueda rápida. Actualmente configuro los índices (¿índices?) Y luego importo mis datos. Esto toma aproximadamente 4 horas, dependiendo de la velocidad del servidor de db. ¿Sería más rápido/más eficiente importar los datos primero y luego realizar la creación de índices?TSQL, la construcción de índices antes o después de la entrada de datos

Respuesta

8

Me gustaría atestar la respuesta de af diciendo que probablemente sea el caso de que "índice primero, insertar después" sería más lento que "insertar primero, index después" donde está insertando registros en una tabla con un índice agrupado, pero no insertando registros en el orden natural de ese índice. El motivo es que para cada inserción, las filas de datos deberían pedirse en el disco.

Como ejemplo, considere una tabla con una clave principal agrupada en un campo uniqueidentifier. La naturaleza (casi) aleatoria de un guid significaría que es posible agregar una fila en la parte superior de los datos, haciendo que todos los datos en la página actual se mezclen (y tal vez también en las páginas inferiores), pero la siguiente fila añadida en la parte inferior. Si la agrupación estaba activada, por ejemplo, una columna de fecha y hora, y estaba agregando filas en el orden de fecha, los registros se insertarían naturalmente en el orden correcto en el disco y no se necesitarían costosas operaciones de ordenación/mezcla de datos.

me gustaría una copia de seguridad de respuesta "depende" de Winston Smith, pero sugieren que el índice agrupado puede ser un factor significativo en la determinación de qué estrategia es la más rápida para sus circunstancias actuales. Incluso podría intentar no tener un índice agrupado y ver qué pasa. ¿Házmelo saber?

+0

+1 para obtener más detalles y contexto. –

+0

Los datos que se estaban insertando estaban en un orden muy poco ordenado, haciendo la indexación después de la inserción era mucho más rápido. Gracias por la explicación. – John

3

Inserción de datos mientras que los índices están en su lugar provoca DBMS para actualizar después de cada fila. Debido a esto, generalmente es más rápido insertar los datos primero y luego crear índices. Especialmente si hay tanta información.

(Sin embargo, siempre es posible que existan circunstancias especiales que pueden causar diferentes características de rendimiento. Tratando es la única manera de saber con certeza.)

+0

** @ f ** ¿En qué supuestos se basa su generalización? Hace poco probé las dos, y encontré que era mucho más rápido insertar a granel con los índices en lugar de soltar y volver a crear después, lo que demoró unos 20 minutos más en un conjunto de datos de unos pocos millones de filas. –

+0

Sí, todo esto depende de los datos específicos, el orden de las filas y los índices. Es muy posible que, aunque el DBMS tenga que trabajar más para insertar cosas fila por fila, si todo está en el orden correcto, DBMS solo puede escribir las cosas y nunca terminar reordenando los datos o equilibrando las estructuras de datos de índice. Estas situaciones suelen ser excepciones, no la norma. Depende. Por lo general, las cosas no están alineadas "exactamente". –

3

que dependerá totalmente de su estrategia de datos e indexación en particular. Cualquier respuesta que obtengas aquí es realmente una suposición.

La única manera de saber con certeza, es probar ambos y tomar las medidas adecuadas, que no será difícil de hacer.

Cuestiones relacionadas