On Fri, Oct 11, 2013 at 9:32 AM, Jesse Long <j...@unknown.za.net> wrote:

> explain select * from archive_document_index where node_id = 29 and value
> = 'BSH70002152';
>                                                         QUERY PLAN
> ------------------------------**------------------------------**
> ------------------------------**------------------------------**--
>  Index Scan using archive_document_index_node_**id_value_idx on
> archive_document_index  (cost=0.57..36.13 rows=14 width=33)
>    Index Cond: ((node_id = 29) AND ((value)::text = 'BSH70002152'::text))
> (2 rows)
>

I believe that this is what Tom is suggesting:

SELECT *
FROM ARCHIVE_DOCUMENT AS ad
WHERE ad.NODE_ID = 29
  AND ad.ARCHIVE_DATE >= '2013-07-08 18:28:00'
  AND EXISTS (SELECT *
              FROM ARCHIVE_DOCUMENT_INDEX AS adi
              WHERE adi.ARCHIVE_ID = ad.ID
                AND adi.NODE_ID = ad.NODE_ID
                AND (adi.VALUE = 'BSH70002152' OR adi.VALUE = 'TC212592')
             )
ORDER BY ad.ARCHIVE_DATE DESC
LIMIT 10;

Forgive my changing of the aliases. I found names like r0 difficult to
interpret easily.

This is a much simpler query since it only requires one subselect, and I
believe Tom is suggesting that this query may be able to make use of the
index or at least find some more efficient plan. How does this perform?

Reply via email to