Saltar al contenido

Múltiples índices vs índice único en múltiples columnas en postgresql

No dudes en compartir nuestra página y códigos en tus redes, ayúdanos a hacer crecer esta comunidad.

Solución:

Independientemente de cuántos índices haya creado en la relación, solo uno de ellos se utilizará en una determinada consulta (que depende de la consulta, las estadísticas, etc.). Entonces, en su caso, no obtendría una ventaja acumulativa al crear dos índices de una sola columna. Para obtener el máximo rendimiento del índice, sugeriría usar el índice compuesto en (ubicación, marca de tiempo).

Tenga en cuenta que las consultas como ... WHERE timestamp BETWEEN smth AND smth no usará el índice anterior mientras consultas como ... WHERE location = 'smth' o ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth voluntad. Es porque el primero attribute in index es crucial para buscar y ordenar.

No olvides realizar

ANALYZE;

después de la creación del índice para recopilar estadísticas.

Actualizar:
Como @MondKin mencionado en los comentarios, ciertas consultas pueden usar varios índices en la misma relación. Por ejemplo, consulta con OR cláusulas como a = 123 OR b = 456 (asumiendo que hay índices para ambas columnas). En este caso, postgres realizaría escaneos de índices de mapas de bits para ambos índices, crearía una unión de los mapas de bits resultantes y la usaría para escanear montones de mapas de bits. En determinadas condiciones, se puede utilizar el mismo esquema para AND consultas pero en lugar de unión habría una intersección.

No existe una regla general para situaciones como estas, le sugiero que experimente con una copia de su base de datos de producción para ver qué funciona mejor para usted: un solo índice de varias columnas o 2 índices de una sola columna.

Una buena característica de Postgres es que puede tener múltiples índices y usarlos en la misma consulta. Consulte este capítulo de los documentos:

… PostgreSQL tiene la capacidad de combinar múltiples índices… para manejar casos que no pueden implementarse mediante escaneos de un solo índice…

… A veces, los índices de varias columnas son mejores, pero a veces es mejor crear índices separados y confiar en la función de combinación de índices…

Incluso puede experimentar creando índices individuales y combinados, y verificar qué tan grande es cada uno y determinar si vale la pena tenerlos al mismo tiempo.

Algunas cosas con las que también puedes experimentar:

  • Si su tabla es demasiado grande, considere dividirla. Parece que podría particionar por ubicación o por fecha. La partición divide los datos de su tabla en tablas más pequeñas, lo que reduce la cantidad de lugares donde debe buscar una consulta.
  • Si sus datos están dispuestos según una fecha (como la fecha de la transacción), verifique los índices BRIN.
  • Si varias consultas procesarán sus datos de manera similar (como agregar todas las transacciones durante el mismo período), verifique las vistas materializadas para que solo tenga que hacer esas agregaciones costosas una vez.

Sobre el orden en el que colocar su índice de varias columnas, coloque primero la columna en la que tendrá una operación de igualdad, y luego la columna en la que tendrá un rango, >= o <= operación.

Agradecemos que desees añadir valor a nuestra información añadiendo tu veteranía en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *