Re: WIP: Covering + unique indexes. (the good and the bad)

Teodor Sigaev <teodor@sigaev.ru>

From: Teodor Sigaev <teodor@sigaev.ru>
To: Erik Rijkers <er@xs4all.nl>, Alexander Korotkov <a.korotkov@postgrespro.ru>
Cc: Peter Geoghegan <pg@bowt.ie>, Anastasia Lubennikova <a.lubennikova@postgrespro.ru>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Alexander Kuzmenkov <a.kuzmenkov@postgrespro.ru>
Date: 2018-04-07T12:27:15Z
Lists: pgsql-hackers
Thank you!

>    create unique index ${t}uniqueinclude_idx on $t using btree (c1, c2) 
> include (c3, c4);
> or for HEAD, just:
>    create unique index ${t}unique_idx on $t using btree (c1, c2);



> -- explain analyze select c1, c2 from nt0___100000000 where c1 < 10000 
> -- explain analyze select c1, c2 from nt0___100000000 where c1 < 10000 
> and c3 < 20

Not so fair comparison, include index twice bigger because of include 
columns. Try to compare with covering-emulated index:
create unique index ${t}unique_idx on $t using btree (c1, c2, c3, c4)

-- 
Teodor Sigaev                      E-mail: teodor@sigaev.ru
                                       WWW: http://www.sigaev.ru/


Commits

  1. Adjust INCLUDE index truncation comments and code.

  2. Add commentary explaining why MaxIndexTuplesPerPage calculation is safe.

  3. Indexes with INCLUDE columns and their support in B-tree

  4. Add amcheck verification of heap relations belonging to btree indexes.

  5. Doc: move info for btree opclass implementors into main documentation.

  6. Doc: mention that you can't PREPARE TRANSACTION after NOTIFY.

  7. Remove dedicated B-tree root-split record types.

  8. Restructure index access method API to hide most of it at the C level.

  9. Split _bt_insertonpg to two functions.

  10. Major overhaul of btree index code. Eliminate special BTP_CHAIN logic for