Hola,

On 3/09/2019 7:24 AM, Carlos T. Groero Carmona wrote:
Hola lista,

Estaba revisando una consulta que esta tomando mucho tiempo 304ms y al revisar el explain no utiliza ninguno de los indexes que existen.

La consulta es esta:

Select mobile_users.* from mobile_users where org_id = 1;
Me da la impresion que esto es parte de la consulta... que quieres hacer con estos resultados ?

Si bien es cierto que ninguno de los indexes que existen para esa tabla tiene solo la columna org_id, todos los indexes son compuestos es decir utilizan multiples columnas donde en casi todos se incluye org_id.

Hay uno que tiene dos columnas org_id y la fecha en que se creo el usuario, sin enbargo postgres nunca utiliza ese index parcialmente, prefiere utilizar el scaneo sequencial.

En este caso, el 99.98% de la information pertenece a org_id =1 pero 304ms es demasiado lento para servidor con 64CPU y 512GB de RAM y solo 356mil rows.
Al contrario creo que es rápido.

En fin despues de comentarles el entornondonde se ejecuto esa consulta, me pregunto: si postgre decidiera utilizar un index en vez de scaneo sequencial, podria utilizar el index que le comente donde se indexa por org_id y la fecha en que se creo la columna, aunque solo se pase el org_id en la consulta?
Alvaro y otras personas ya te respondieron, no solo en Postgresql en cualquier otra base de datos son los costos los que importan, en este caso es menos costoso hacer un full scan vs el indice ( usar indices lo que no te dicen es que usa CPU ). por eso la mayoria de los DW tienen muy pocos indices.

Este es el resultado del explain analyze:
Seq Scan on mobile_users  (cost=0.00..38533.34 rows=356403 width=9015) (actual time=0.022..292.568 rows=356409 loops=1)
  Filter: (org_id = 1)
  Rows Removed by Filter: 18
Planning time: 2.292 ms
Execution time: 304.003 ms

Esto me dice que debe sacar la información de la RAM,

Es posible sacar el plan de execución con esto.
explain (analyze,buffers)
select mobile_users.* from mobile_users where org_id = 1;

PS: Ese punto me confunde... son 304 ms o son 304 segundos ?

que Filesystem estas usando y sí has hecho un defrag en caso de que estes usando XFS ?


Gracias de antemano por sus comentarios.
Carlos




Reply via email to