On Sat, 12 Jan 2013 02:47:26 +0100
"T. E. Lawrence" <t.e.lawre...@icloud.com> wrote:

> Hello,
> 
> I have a pretty standard query with two tables:
> 
> SELECT table_a.id FROM table_a a, table_b b WHERE ... AND ... AND b.value=...;
> 
> With the last "AND b.value=..." the query is extremely slow (did not wait for 
> it to end, but more than a minute), because the value column is not indexed 
> (contains items longer than 8K).
 
You can construct your own home made index, add a new column in table b, with 
the first 8-16 bytes/chars of b.value, use this column on your query and refine 
to a complete b.value. Don't forget tocCreate an index for it too. You can keep 
this column updated with a trigger.

Perhaps you can use a partial index for b.value column, i never used that 
feature so documentation/others can point you how to do it.


> However the previous conditions "WHERE ... AND ... AND" should have already 
> reduced the candidate rows to just a few (table_b contains over 50m rows). 
> And indeed, removing the last "AND b.value=..." speeds the query to just a 
> millisecond.
> 
> Is there a way to instruct PostgreSQL to do first the initial "WHERE ... AND 
> ... AND" and then the last "AND b.value=..." on the (very small) result?
> 
> Thank you and kind regards,
> T.

---   ---
Eduardo Morras <emorr...@yahoo.es>


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to