2014-05-01 22:30 GMT+02:00 Andreas Joseph Krogh <andr...@visena.com>:

> På torsdag 01. mai 2014 kl. 21:53:32, skrev Pavel Stehule <
> pavel.steh...@gmail.com>:
>
>
>
> 2014-05-01 21:39 GMT+02:00 Andreas Joseph Krogh <andr...@visena.com>:
>>
>> På torsdag 01. mai 2014 kl. 21:30:39, skrev Pavel Stehule <
>> pavel.steh...@gmail.com>:
>>
>> Hello
>> [snip]
>>
>> I had a perfect success on similar use case with descent ordered partial
>> index
>>
>> http://www.postgresql.org/docs/9.3/interactive/sql-createindex.html
>>
>>
>> I'm not getting good performance. Are you able to craft an example using
>> my schema and partial index?
>>
>
> maybe some like
>
> CREATE INDEX ON message_property (person_id, message_id) WHERE pr.is_read
>
> When I am thinking about your schema, it is designed well, but it is not
> index friendly, so for some fast access you should to hold a cache (table)
> of unread messages
>
>
> Ah, that's what I was hoping to not having to do. In my system, messages
> arrive all the time and having to update a cache for all new messages for
> all users seems messy... Seems I could just as well create a
> message_property for all users when a new message arrives, so I can INNER
> JOIN it and get good performance. But that table will quickly grow *very*
> large...
>

What you need is a JOIN index, that is not possible in Postgres.

I afraid so some "ugly" solutions is necessary (when you require extra fast
access). You need a index (small index) and it require some existing set -
you cannot do index on the difference two sets.

I expect so some flag on the relation "message" - like "it should not be
not read" can helps little bit - and can be used in partial index as
conditions. Other possibility is some variant of partitioning - you can
divide a messages and users to distinct sets and then you decrease a number
of possible combinations.

Regards

Pavel


>
>  --
> *Andreas Jospeh Krogh*
> CTO / Partner - Visena AS
> Mobile: +47 909 56 963
> andr...@visena.com
> www.visena.com
>  <https://www.visena.com>
>
>

Reply via email to