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
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?
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.)
** @ 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. –
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". –
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.
- 1. MVVM cargar datos durante o después de la construcción de ViewModel?
- 2. Cuándo filtrar/desinfectar datos: antes de la inserción de la base de datos o antes de la visualización?
- 3. Crear diagramas UML después o antes de la codificación?
- 4. variable antes o después de valor en la instrucción IF
- 5. codestyle; poner javadoc antes o después de la anotación?
- 6. Obtener los índices de una matriz después de la clasificación?
- 7. Tomando la entrada de la entrada estándar después freopen()
- 8. ¿Tenedor antes o después de aceptar conexiones?
- 9. Sanitize HTML antes de almacenar en la base de datos o antes de la representación? (Biblioteca AntiXSS en ASP.NET)
- 10. TSQL conocer miembros de la función de base de datos
- 11. CSS generación de contenido antes o después de los elementos de entrada ''
- 12. cómo automatizar o facilitar la construcción/prueba multiplataforma antes de comprometerse?
- 13. Meta Refresh: ¿El recuento comienza después de la carga de la página o antes?
- 14. ¿DebeRasterize en un CALayer causar rasterización antes o después de la transformación de la capa?
- 15. Regex para que coincida con la frase exacta, nada antes o después de la frase
- 16. ¿Qué es más rápido, EXISTE antes o después del INSERT?
- 17. Registro de TSQL dentro de la transacción
- 18. Seleccionar de la unión tsql
- 19. Cómo desinfectar la entrada de la base de datos ODBC?
- 20. ¿Alguna base de datos admite la creación automática de índices?
- 21. Índices de base de datos y su notación Big-O
- 22. Agregar elemento antes/después de la selección de texto
- 23. Valor de retorno de C++ creado antes o después de la destrucción automática de var.
- 24. ¿Cuándo deberían reconstruirse los índices de la base de datos?
- 25. cómo recordar datos de entrada en los formularios incluso después de la página de actualización?
- 26. Agregar texto antes o después de un elemento HTML
- 27. Forzar la evaluación de la entrada de función antes de la evaluación comparativa en el Criterio
- 28. TSQL para asignar usuario a la base de datos
- 29. La construcción de un modelo de datos extensible, EF 4
- 30. ¿XPathDocument usa la secuencia de memoria en la que está construido después de la construcción?
+1 para obtener más detalles y contexto. –
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