> only 1 index lookup is needed.
Sorry, must be "only lookups of 1 index are needed".

--
Dilshod Urazov

вт, 20 февр. 2024 г. в 21:09, Dilshod Urazov <urazoffic...@gmail.com>:

> > I'm not sure why are two indexes not sufficient here?
>
> Did I write that they are not sufficient? The whole point is that in
> relational DBMSs which are widely used
> to store graphs we can optimize storage in such cases. Also we can
> optimize traversals e.g. if we want to
> get all nodes that are adjacent to a given node with id = X in an oriented
> graph
>
> SELECT id, label
> FROM Nodes
> JOIN Edges ON Nodes.id = Edges.target
> WHERE Edges.source = X;
>
> only 1 index lookup is needed.
>
> > The entry could've been removed because (e.g.)
> > test's b column was updated thus inserting a new index entry for the
> > new HOT-chain's TID.
>
> If test'b column was updated and HOT optimization took place no new index
> entry is created. Index tuple
> pointing to old heap tuple is valid since now it is pointing to HOT-chain.
>
> --
> Dilshod Urazov
>
> пн, 19 февр. 2024 г. в 22:32, Matthias van de Meent <
> boekewurm+postg...@gmail.com>:
>
>> On Mon, 19 Feb 2024 at 18:48, Dilshod Urazov <urazoffic...@gmail.com>
>> wrote:
>> >
>> > - Motivation
>> >
>> > A regular B-tree index provides efficient mapping of key values to
>> tuples within a table. However, if you have two tables connected in some
>> way, a regular B-tree index may not be efficient enough. In this case, you
>> would need to create an index for each table. The purpose will become
>> clearer if we consider a simple example which is the main use-case as I see
>> it.
>>
>> I'm not sure why are two indexes not sufficient here? PostgreSQL can
>> already do merge joins, which would have the same effect of hitting
>> the same location in the index at the same time between all tables,
>> without the additional overhead of having to scan two table's worth of
>> indexes in VACUUM.
>>
>> > During the vacuum of A an index tuple pointing to a dead tuple in A
>> should be cleaned as well as all index tuples for the same key.
>>
>> This is definitely not correct. If I have this schema
>>
>> table test (id int primary key, b text unique)
>> table test_ref(test_id int references test(id))
>>
>> and if an index would contain entries for both test and test_ref, it
>> can't just remove all test_ref entries because an index entry with the
>> same id was removed: The entry could've been removed because (e.g.)
>> test's b column was updated thus inserting a new index entry for the
>> new HOT-chain's TID.
>>
>> > would suffice for this new semantics.
>>
>> With the provided explanation I don't think this is a great idea.
>>
>> Kind regards,
>>
>> Matthias van de Meent.
>>
>

Reply via email to