Re: WIP: Covering + unique indexes.
Robert Haas <robertmhaas@gmail.com>
On Mon, Sep 26, 2016 at 11:17 AM, Anastasia Lubennikova <a.lubennikova@postgrespro.ru> wrote: >> Is there any fundamental problem in storing them in ordered way? I >> mean to say, you need to anyway store all the column values on leaf >> page, so why can't we find the exact location for the complete key. >> Basically use truncated key to reach to leaf level and then use the >> complete key to find the exact location to store the key. I might be >> missing some thing here, but if we can store them in ordered fashion, >> we can use them even for queries containing ORDER BY (where ORDER BY >> contains included columns). > > I'd say that the reason for not using included columns in any > operations which require comparisons, is that they don't have opclass. > Let's go back to the example of points. > This data type don't have any opclass for B-tree, because of fundamental > reasons. > And we can not apply _bt_compare() and others to this attribute, so > we don't include it to scan key. > > create table t (i int, i2 int, p point); > create index idx1 on (i) including (i2); > create index idx2 on (i) including (p); > create index idx3 on (i) including (i2, p); > create index idx4 on (i) including (p, i2); > > You can keep tuples ordered in idx1, but not for idx2, partially ordered for > idx3, but not for idx4. Yeah, I think we shouldn't go there. I mean, once you start ordering by INCLUDING columns, then you're going to need to include them in leaf pages because otherwise you can't actually guarantee that they are in the right order. And then you have to wonder why an INCLUDING column is any different from a non-INCLUDING column. It seems best to make a firm rule that INCLUDING columns are there only for the values, not for ordering. That rule is simple and clear, which is a good thing. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Adjust INCLUDE index truncation comments and code.
- 075aade4361b 11.0 landed
-
Add commentary explaining why MaxIndexTuplesPerPage calculation is safe.
- 2a67d6440db4 11.0 cited
-
Indexes with INCLUDE columns and their support in B-tree
- 8224de4f42cc 11.0 landed
-
Add amcheck verification of heap relations belonging to btree indexes.
- 7f563c09f890 11.0 cited
-
Doc: move info for btree opclass implementors into main documentation.
- 3785f7eee3d9 11.0 cited
-
Doc: mention that you can't PREPARE TRANSACTION after NOTIFY.
- e4fbf22831c2 11.0 cited
-
Remove dedicated B-tree root-split record types.
- 0c504a80cf2e 11.0 cited
-
Restructure index access method API to hide most of it at the C level.
- 65c5fcd353a8 9.6.0 cited
-
Split _bt_insertonpg to two functions.
- bc292937ae6a 8.3.0 cited
-
Major overhaul of btree index code. Eliminate special BTP_CHAIN logic for
- 9e85183bfc31 7.1.1 cited