nataraj: (Default)
[personal profile] nataraj
Есть мега запрос, собираемых из двух частей, каждая часть из которых строиться на базе одной и той же выборки из таблицы item, но дальнейшая судьба этих выборок разная. Для этой выборки есть параметр передаваемый из вне. Но так как выборка поминается два раза, то знаков вопроса в теле запроса получается два, и передавать этот параметр понадобиться два раза

select item_id, sum(count) from (
select l.active as item_id, count(l.passive) as count
from item_link as l, item as i
where l.active=i.item_id and i.type_id=? and l.linktype_id='TOPIC' group by l.active
union
select item_id, 0 as count from item where type_id =?
) as s group by item_id;

Внимание вопрос, есть ли в PostgreSQL какой нибудь способ сначала поймать параметр, поименовать, (что то на абстрактном языке выглядящее как SET My_Cool_Param_Var=?) а потом его уже поименованным использовать дважды?

Вопрос второй: Как в оном же постгресе померить время исполнения запроса (не пиша перловый скрипт улавливающий time до и после), и как сделать так чтобы он каждый запрос исполнял на холодную, без предварительно закешированных значений?

Date: 2009-10-02 08:11 am (UTC)
From: [identity profile] beldmit.livejournal.com
1. Bind
2а EXPLAIN ...
2б никак

Date: 2009-10-02 03:57 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
1. В смысле bind в перле? Он не подходит ибо параметры передаются коммуниверным фильтром, а он до определенных предело является аксиомой. а в самом постгрессе (в индексе документации) я оного бинда не нашел.

2. Нужно смотреть actual time первой строки? а cost это в чем мериется?

Date: 2009-10-02 04:43 pm (UTC)
From: [identity profile] beldmit.livejournal.com
1. Тогда в интерфейсе фильтров попробуй.
2. EXPLAIN выдает тебе план. Если он хороший (нет SEQ SCAN-ов по большой таблице), то счастья от этого запроса тебе больше не будет, надо его переписать. cost - что-то внутреннее.

Date: 2009-10-02 04:44 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Кажется, вместо UNION тебе тут нужен LEFT JOIN, и это поползет быстрее.

Date: 2009-10-02 05:34 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
Ага, спасиб! именно это я и собирался мерить!

Date: 2009-10-02 08:12 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Ты померяй, а не на слово верь :-)

Date: 2009-10-02 08:25 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
А то ж... ;-)

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 29th, 2026 10:50 pm
Powered by Dreamwidth Studios