function runs slow

Поиск
Список
Период
Сортировка
От Charles Holleran
Тема function runs slow
Дата
Msg-id BAY126-W20926F93D399CB24759AD4CEBB0@phx.gbl
обсуждение исходный текст
Ответы Re: function runs slow  ("A. Kretschmer" <andreas.kretschmer@schollglas.com>)
Список pgsql-novice
I have a query:
 
 
SELECT date_observed FROM tbl_a
WHERE
  x = 384394918 AND
  y = 5 AND
  date_observed <= '14-Jul-10 00:00'
ORDER BY
  date_observed DESC
LIMIT
  1;
 
 
This query returns in 16 ms.  Great!  So I functionized the working method as:
 

CREATE OR REPLACE FUNCTION get_last_on_or_before(c integer, t integer, g timestamp with time zone)
  RETURNS timestamp with time zone AS
$BODY$
 
SELECT date_observed FROM tbl_a
WHERE
  x = $1 AND
  y = $2 AND
  date_observed <= $3
ORDER BY
  date_observed DESC
LIMIT
  1;

$BODY$
  LANGUAGE 'sql' VOLATILE
  COST 100;
 
 
Then I queried this new function:
 

SELECT get_last_on_or_before(384394918, 5, '14-Jul-10 00:00');
 
 
The query returns in 2891 ms!  This is too slow for the application.
 
Why is it slow when the same un-functionized query was fast?  The tbl_a has est. 30,000,000 records.  It has an index for (x,y) pairs.  It has an index for date_observed.  So good results on the straight query.  Where did I go wrong with the function? 
 
Charlie
 


Turn down-time into play-time with Messenger games Play Now!

В списке pgsql-novice по дате отправления:

Предыдущее
От: Mark Kelly
Дата:
Сообщение: Re: Order by provided IDs?
Следующее
От: "A. Kretschmer"
Дата:
Сообщение: Re: function runs slow