División / combinación de particiones de tablas de SQL: ¿Cuál es el mejor enfoque para implementar?

StackOverflow https://stackoverflow.com/questions/160128

  •  03-07-2019
  •  | 
  •  

Pregunta

Microsoft en su MSDN entrada sobre alterando las particiones de SQL 2005, enumeró algunos enfoques posibles:

  • Cree una nueva tabla particionada con la función de partición deseada y luego inserte los datos de la tabla anterior en la nueva tabla utilizando una instrucción INSERT INTO ... SELECT FROM.
  • Crear un índice agrupado particionado en un montón
  • Descarte y reconstruya un índice particionado existente utilizando la instrucción CREATE INDEX de Transact-SQL con la cláusula DROP EXISTING = ON.
  • Realizar una secuencia de instrucciones ALTER PARTITION FUNCTION.

¿Alguna idea de cuál será la forma más eficiente para un DB a gran escala (millones de registros) con particiones basadas en las fechas de los registros (algo así como particiones mensuales), donde los datos se difunden en 1-2 años?

Además, si accedo principalmente (para leer) información reciente, ¿tendrá sentido mantener una partición durante los últimos X días, y todos los demás datos serán otra partición? ¿O es mejor dividir el resto de los datos también (para cualquier acceso aleatorio basado en el rango de fechas)?

¿Fue útil?

Solución

Recomiendo el primer enfoque: crear una nueva tabla particionada e insertarla en ella, porque le da el lujo de comparar sus tablas antiguas y nuevas. Puede probar los planes de consulta en ambos estilos de tablas y ver si sus consultas son realmente más rápidas antes de pasar al nuevo diseño de tabla. Puede encontrar que no hay mejora, o puede probar varias funciones / esquemas de partición diferentes antes de decidirse por su resultado final. Es posible que desee particionar en algo que no sea el intervalo de fechas: la fecha no siempre es efectiva.

He hecho particiones con tablas de filas de 300-500 m con datos distribuidos en 6-7 años, y ese enfoque de inserción de tablas fue el que encontré más útil.

Preguntó acerca de cómo particionar: la mejor respuesta es intentar diseñar sus particiones para que sus consultas lleguen a una sola partición. Si tiende a concentrar las consultas en los datos recientes, Y si filtra ese campo de fecha en sus cláusulas where, entonces sí, tenga una partición separada para los X días más recientes.

Tenga en cuenta que debe especificar el campo particionado en su cláusula where. Si no está especificando ese campo, es probable que la consulta llegue a cada partición para obtener los datos, y en ese momento no tendrá ningún aumento de rendimiento.

¡Espero que ayude! He hecho muchas particiones, y si quieres publicar algunos ejemplos de estructuras de tabla & amp; consultas, que lo ayudarán a obtener una mejor respuesta para su entorno.

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