Pregunta

Tengo una tabla con tres columnas:

usuario varchar, status varchar, rep int

El estado y el representante de

se actualizan a menudo y uno de los requisitos es:

Dado un valor de fecha y hora ver valores de rep y, para cada usuario, en la fecha dada.

Puedo agregar una columna updated_at datetime a la tabla e insertar nuevas filas con el mismo usuario en lugar de actualizar las existentes, pero la tabla se hace grande y debo unir los resultados de la consulta a resultados similares de otras tablas, por lo que necesito una consulta rápida.

¿Cuál es la solución de mejor rendimiento para este problema en SQL Server?

¿Fue útil?

Solución

Dependiendo de la manera exacta en que vaya a utilizar la información del informe, podría ser mejor crear una tabla de Historial que antes de actualizar la tabla principal, escriba los valores actuales en la tabla de Historial, agregando la marca de tiempo.

Eso sería lo mejor si en realidad solo está seleccionando días / usuarios / estados específicos del historial

Otros consejos

Almacenaré esta es una tabla relacionada, ya que supongo que la mayoría del tiempo solo consultará el estado actual cuando se inscriba. Si va a hacer una gran cantidad de este tipo de consultas y agregar este tipo de datos a muchas tablas, no solo a esta, crearía una base de datos OLAP separada para los informes.

Incidentalmente, mientras esté haciendo esto, puede considerar si también desea registrar quién hizo el cambio. Entonces, básicamente, ha construido una solución de auditoría.

Una opción para esto sería utilizar dos tablas separadas: a " valores actuales " tabla, y una tabla de historia. La tabla de valores actuales contendría los únicos valores más recientes para cada usuario, lo que la mantendría pequeña y fácil de unir. La tabla de historial contendría las tres columnas que enumeró, así como la columna de marca de tiempo, y seguiría los cambios en los valores a lo largo del tiempo. Cada vez que quisiera cambiar un valor en la tabla de valores actual, agregaría simultáneamente una fila con los nuevos valores a la tabla de historial, usando gettime () como la marca de tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top