Wow! Thank you very much Jeff!! I am really grateful.

Thanks to the btree (instead of gin) the query now takes about 500ms
instead of 70s.

Il Mer 13 Nov 2019, 13:18 Jeff Janes <jeff.ja...@gmail.com> ha scritto:

> On Wed, Nov 13, 2019 at 6:56 AM Marco Colli <collimarc...@gmail.com>
> wrote:
>
>> > the answer is that is because it is a GIN index. Make the same index
>> only as btree, and you should get good performance as it can filter the
>> tags within a given project without visiting the table.
>>
>> Currently I have this GIN index:
>>     "index_subscriptions_on_project_id_and_tags" gin (project_id, tags)
>> WHERE trashed_at IS NULL
>>
>>
> Multicolumn GIN indexes are nearly worthless IMO when one column is a
> scalar.  You can use this index, but it won't be better than one just on
> "GIN (tags)  trashed_at IS NULL".  An N-column GIN index is mostly the same
> thing as N single column GIN indexes.
>
>
>> It uses the btree_gin extension and works perfectly for tag search,
>> except for the "NOT" operator. I don't understand why it doesn't use the
>> GIN index also for the "NOT" operator.
>>
>
> Because it can't.  Tom already did a good job of describing that. Can you
> describe what steps you think an index should take to jump to the specific
> rows which fail to exist in an inverted index?
>
>
> The problem is that I cannot create the same index with BTree, because PG
>> doesn't support BTree on array :(
>>
>
> Sure it does.  It can't jump to specific parts of the index based on the
> array containment operators, but it can use them for in-index filtering
> (but only if you can do an index-only scan).  And really, that is probably
> all you need to get > 100x improvement.
>
> Are you getting an error when you try to build it?  If so, what is the
> error?
>
> Cheers,
>
> Jeff
>
>>

Reply via email to