From: | David Pradier <dpradier(at)apartia(dot)fr> |
---|---|
To: | pgsql-performance(at)postgresql(dot)org |
Subject: | A cache for the results of queries ? |
Date: | 2004-02-26 13:30:38 |
Message-ID: | 20040226133038.GA1481@apartia.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Hi everybody,
i'd like to know if it exists a system of cache for the results of
queries.
What i'd like to do :
select whatever_things from (selection_in_cache) where special_conditions;
The interesting thing would be to have a precalculated
selection_in_cache, especially when selection_in_cache is a very long
list of joins...
For example, a real case:
SELECT
p.id_prospect,
p.id_personne1,
INITCAP(p1.nom) AS nom,
INITCAP(p1.prenom) AS prenom,
a1.no_tel,
a1.no_portable,
p.dernier_contact,
cn.id_contact,
cn.id_vendeur,
cn.id_operation,
CASE WHEN p.dernier_contact IS NOT NULL THEN cn.date_contact::ABSTIME::INT4 ELSE p.cree_le::ABSTIME::INT4 END AS date_contact,
cn.id_moyen_de_contact,
cn.id_type_evenement,
cn.nouveau_rdv::ABSTIME::INT4 AS nouveau_rdv,
cn.date_echeance::ABSTIME::INT4 AS date_echeance,
cn.date_reponse::ABSTIME::INT4 AS date_reponse,
(CASE WHEN lower(cn.type_reponse) = '.qs( 'abandon' ).' AND cn.id_vendeur = '.qs( $login ).' THEN '.qs( 'O').' ELSE p.abandon END) AS abandon
FROM
prospect p
JOIN personne p1 ON (p.id_personne1 = p1.id_personne)
JOIN adresse a1 ON (a1.id_adresse = p1.id_adresse_principale)
LEFT JOIN contact cn ON (p.dernier_contact = cn.id_contact)
'.( $type_orig ? 'LEFT JOIN orig_pub op ON ( p.id_orig_pub = op.id_orig_pub )' : '' ).'
WHERE
( '.(
$abandon
? ''
: '(
(cn.type_reponse IS NULL OR lower(cn.type_reponse) != ' .qs( 'abandon' ) .' OR cn.id_vendeur != ' .qs( $login ) .')
AND (p.abandon != ' .qs( 'O' ) .' OR p.abandon IS NULL)) AND '
).' TRUE '.$condition.')
ORDER BY
'.$primary_sort.',
'.secondary_sort.'
LIMIT 30
OFFSET '.$offset*$page_length
There is some perl inside to generate the query ; for non-perl-people,
'.' is used for concatenation and '( a ? b : c)' means 'if a then b else c'.
$condition is a precalculated set of conditions.
Here i have a very heavy query with 4 very heavy JOIN.
That's why i'd like to have a precalculated query.
A view wouldn't help, because it would calculate the whole query each
time.
Any idea ?
Thanks in advance for any input.
--
dpradier(at)apartia(dot)fr 01.46.47.21.33 fax: 01.45.20.17.98
From | Date | Subject | |
---|---|---|---|
Next Message | Richard Huxton | 2004-02-26 14:26:00 | Re: A cache for the results of queries ? |
Previous Message | teknokrat | 2004-02-26 12:46:23 | compiling 7.4.1 on Solaris 9 |