Muchos índices Postgresql

Tengo un formulario de búsqueda que tiene muchas opciones de búsqueda. ¿Cómo indexaría todas estas columnas? ¿Está bien crear un índice con muchas columnas?

Ejemplo de rieles:

add_index :cars, [:brand, :fuel, :year_from, :year_to, :price_from, :price_to] and so on...

¿Está "bien" incluir muchas columnas en un solo índice?

PD: estoy usando el Postgresql DS más nuevo

preguntado el 28 de julio de 12 a las 09:07

2 Respuestas

Depende de cómo planee consultar la tabla de la base de datos. ¿Está planeando ejecutar una consulta que alguna vez tendrá todos los campos en la cláusula?

En el caso de que la consulta contenga todos los campos de la cláusula, crear un índice de varias columnas es la forma correcta, pero si los campos que filtrará en la cláusula where podrían ser solo algunos de estos (por ejemplo, a veces solo marca y combustibles, y otras veces solo year_from y year_to) y en diferentes combinaciones, es mejor que crees un solo índice para cada campo ...

Respondido 28 Jul 12, 09:07

Un índice de muchas columnas sería muy grande, probablemente demasiado grande para ser útil. PostgreSQL tiene un buen planificador, y probablemente usaría las primeras columnas del índice y luego escanearía las filas en lugar de escanear la mayor parte restante del índice. Y esto suponiendo que las primeras columnas del índice se proporcionen como criterios de búsqueda.

Tenga en cuenta que documentación tiene esto que decir sobre los índices de varias columnas,

Los índices de varias columnas deben usarse con moderación. En la mayoría de las situaciones, un índice en una sola columna es suficiente y ahorra espacio y tiempo. Es poco probable que los índices con más de tres columnas sean útiles a menos que el uso de la tabla sea extremadamente estilizado.

y utilice índices de una sola columna.

Es posible que desee experimentar agregando un índice de 2 columnas o dos en el futuro, cuando tenga una buena idea de qué criterios es más probable que se busquen.

Respondido 28 Jul 12, 12:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.