sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo usar un índice en una tabla particionada en postgresql 8.3.7?

Los índices funcionan bien para hacer un escaneo solo de las particiones relevantes en PostgreSQL. Pero debe configurar todo correctamente para que funcione, y es fácil perder un paso en la larga lista de cosas documentadas en http://www.postgresql.org/docs/current/static/ddl-partitioning.html

Lo principal a tener en cuenta es que para evitar un escaneo secuencial, debe proporcionar suficiente información a PostgreSQL para que pueda probar que algunas particiones no pueden tener los datos que está buscando; luego se omiten como fuentes potenciales para los resultados de la consulta. El artículo al que se vincula señala esto como una solución al problema de escaneo de secuencias:"Si agrega restricciones de rango al campo de fecha de cada partición, esta consulta se puede optimizar en un bucle en el que primero consulta la partición "más reciente" y trabaja hacia atrás hasta que encuentre un valor único que sea mayor que el rango de todas las particiones restantes", pero no muestra el plan mejorado que vería después de ese cambio.

Algunos errores comunes que podrías haber cometido:

-El parámetro de restricción_exclusión en el archivo postgresql.conf está desactivado de forma predeterminada. Con ese valor predeterminado, no obtendrá lo que espera.

-No se crearon particiones no superpuestas usando CHECK, lo que evita que el planificador sepa qué hay dentro de cada una de ellas. Es posible que se salte este paso, pero aún así colocar sus datos en las particiones correctas correctamente, el planificador simplemente no lo sabrá.

-No puso un índice en cada partición, solo creó uno en la tabla maestra. Esto le dará un escaneo secuencial solo en la partición relevante, por lo que no es tan malo como el anterior pero tampoco es bueno.

Hay algo de trabajo para hacer todo esto más fácil en las próximas versiones de PostgreSQL (la configuración de la partición de restricción es bastante automática en 8.4 y se está trabajando en algún tipo de automatización de configuración de partición). En este momento, si sigue las instrucciones cuidadosamente y evita todos estos problemas, debería funcionar.