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

Mejora de la velocidad de consulta:SELECCIÓN simple en una gran tabla de postgres

Extraer mis comentarios en una respuesta:la búsqueda de índice aquí fue muy rápida:todo el tiempo se dedicó a recuperar las filas reales. 23 segundos/7871 filas =2,9 milisegundos por fila, lo cual es razonable para recuperar datos que están dispersos en el subsistema del disco. Las búsquedas son lentas; puede a) colocar su conjunto de datos en RAM, b) comprar SSD o c) organizar sus datos con anticipación para minimizar las búsquedas.

PostgreSQL 9.2 tiene una función llamada escaneos de solo índice que le permite (generalmente) responder consultas sin acceder a la tabla. Puedes combinar esto con el btree index propiedad de mantener automáticamente el orden para que esta consulta sea rápida. Mencionas int1 , int2 y dos flotadores:

CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);

SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index

Tenga en cuenta también que esto no borra mágicamente las búsquedas del disco, simplemente las mueve del tiempo de consulta al tiempo de inserción. También le cuesta espacio de almacenamiento, ya que está duplicando los datos. Aún así, esta es probablemente la compensación que desea.