Re: optiminizacion de select (order by desc limit 1)

From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: uno dos <refreegrata(at)yahoo(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: optiminizacion de select (order by desc limit 1)
Date: 2010-05-13 04:39:03
Message-ID: AANLkTin1YeVNTEZ9uIHVOpyTtv2vMgjxRquoPLOeID6O@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2010/5/12 uno dos <refreegrata(at)yahoo(dot)com>
>
> Duda 1
> ¿Es normal que postgresql se tome el 100% de cpu pero por tiempo muy reducido, o aún así es mucho?(shared buffers de 150
> mb, si, se que es bajo)
>

tienes pruebas de que es postgres el que esta tomando el 100% del cpu?
como monitoreaste esto?
si sabes que postgres esta tomando el 100% del cpu quiza tambien
puedas deducir que sesion es y que esta haciendo

> Duda 2
> Mi segunda duda,: mirando y re-mirando mi código, para ver si puedo optimizar mis consultas lo única consulta que encuentro que
> no me gusta, y que quizás pudiera ser causante del lío es una del tipo
> ---------------------------------------------------------------------------------------------------------------------------------
> select dato1 FROM tabla WHERE codigo_2=NEW.codigo_2 AND codigo_3=NEW.codigo_3 AND codigo_4=NEW.codigo_4
> ORDER BY codigo DESC LIMIT 1 FOR UPDATE;
> ---------------------------------------------------------------------------------------------------------------------------------
>
> Debo hacer varios tipos de consultas similares dentro de la función de un TRIGGER BEFORE, por un tema de validaciones,  no
> puedo controlarlas, sólo a través del código de la aplicación, ya que en algunas ocasiones (según requisitos del jefe) debiera
> intervenirse directamente la base de datos.
>
> Mi pregunta es
> Puedo hacer esto "ORDER BY codigo DESC LIMIT 1"  de alguna manera más óptima.
>
> EXPLAIN de una  de estas consultas.
> "Limit  (cost=21.57..21.57 rows=1 width=95)"
> "  ->  Sort  (cost=21.57..21.58 rows=5 width=95)"
> "        Sort Key: codigo"
> "        ->  Index Scan using fki_tiene_pr_rx on existencia  (cost=0.00..21.54 rows=5 width=95)"
> "              Index Cond: (codigo_producto = 686)"
>

crea un indice sobre el campo codigo y mira como te va

> En todo caso demora entre 35 y 45 ms.
>

te faltan como 950ms para llegar a un segundo... no me parece tan
malo, puede ser mas rapido pero tampoco es pesimo y ciertamente solo
te ocuparia el cpu una fraccion de tiempo muchisimo menor a un 1s...

--
Jaime Casanova         www.2ndQuadrant.com
Soporte y capacitación de PostgreSQL

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Horacio Miranda 2010-05-13 04:42:11 Re: optimizando Query
Previous Message Christian Ortiz 2010-05-13 04:33:00 Re: optimizando Query