No soy un DBA ("! Bueno", se le pensando en un momento.)Agrupe el índice en una columna de fecha y hora siempre en aumento en la tabla de registro?
Tengo una tabla de datos de registro con estas características y patrones de uso:
- Una columna
datetime
para almacenar marcas de tiempo de registro cuyo valor es cada vez mayor y en su mayoría (pero solo en su mayoría) único - Inserciones frecuentes (digamos, una docena por minuto), solo al final del rango de marca de tiempo (se registran datos nuevos))
- Eliminaciones infrecuentes, a granel, fr om la comenzando de la gama de marca de tiempo (datos antiguos se borran)
- No hay actualizaciones en todos los
- selecciona frecuentes-ish utilizando la columna de la marca de tiempo como el criterio principal, junto con criterios secundarios en otras columnas
- Selecciona poco frecuentes utilizando otras columnas como los criterios (y no incluida la columna de marca de tiempo)
- Una buena cantidad de datos, pero ni de lejos suficiente como para que me preocupa mucho acerca de espacio de almacenamiento
Además, actualmente hay una ventana de mantenimiento diario durante la cual podría hacer la optimización de la tabla.
Francamente, no espero que esta tabla desafíe al servidor en el que va a estar, incluso si lo indexé un poco, pero me pareció una buena oportunidad para solicitar información sobre los índices en clúster de SQL Server.
Sé que los índices agrupados determinan el almacenamiento de los datos reales de la tabla (los datos se almacenan en los nodos hoja del índice) y que los índices no agrupados son punteros separados en los datos. Entonces, en términos de consulta, un índice agrupado va a ser más rápido que un índice no agrupado: una vez que encontramos el valor del índice, los datos están ahí. Hay costos de inserción y eliminación (y, por supuesto, una actualización que cambia el valor de la columna del índice agrupado sería particularmente costoso).
Pero leo in this answer que elimina huecos que no se limpian hasta/a menos que se reconstruya el índice.
Todo esto sugiere a mí que yo debería:
- Poner un índice agrupado en la columna de la marca de tiempo con un factor de relleno 100%
- índices no agrupados poner en cualquier otra columna que puede ser utilizado como criterio en una consulta que tampoco implica la columna agrupada (que puede ser cualquiera de ellos en mi caso)
- Horario elimina el grueso que se produzca durante el intervalo de mantenimiento diario
- Planificar una reconstrucción del clúster índice que se produce inmediatamente después del volumen de lete
- relajarse y salir más
Am I de base muy alejada de allí? ¿Necesito reconstruir el índice con frecuencia de esa manera para evitar mucho espacio desperdiciado? ¿Hay otras cosas obvias (para un DBA) que debería estar haciendo?
Gracias de antemano.
Solo recomendaría tener cuidado con el uso de "timestamp" para describir una columna de fecha y hora. En SQL Server, el término "marca de tiempo" ha sido víctima de ser asignado a un tipo de datos que no tiene nada que ver con la fecha o la hora, llamado ROWVERSION. Dado que esto siempre puede desencadenar confusión, me acostumbraría a evitar este término, incluso cuando realmente signifique una columna ROWVERSION. Tristemente, las herramientas propias de SQL Server realmente no alientan esto, de hecho, cuando creas una columna ROWVERSION, al crear scripts termina mostrándote TIMESTAMP. –
@ Aaron: Doh! Buen punto, gracias. Sobre la base de esto iba a volver y editar, pero se convirtió en un desastre. Espero que gracias a tu comentario la gente no lo malinterprete. –