﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
30913	Add support for adding non-key columns to indexes	Hannes Ljungberg	nobody	"Postgres got support for the `INCLUDE` clause in `CREATE INDEX` in version 11. This can be used to add non-key columns to the index. 

{{{
CREATE INDEX idx
    ON t1 ( col1 )
     INCLUDE ( col2 )
}}}

This allows for Index Only Scans on queries like:

{{{
SELECT col1, col2 FROM t1 WHERE col1 = 'foo';
}}}

More info:
https://www.postgresql.org/docs/current/sql-createindex.html
https://use-the-index-luke.com/blog/2019-04/include-columns-in-btree-indexes
https://www.postgresql.org/docs/10/indexes-index-only-scans.html

The idea is to add an additional kwarg to `Index` to support this: 

{{{
Index(
    name='some-idx',
    fields=['headline'],
    include=['pub_date']
)
}}}

One of the biggest possibilities of this feature is to add included columns to unique indexes and use them to perform Index Only Scans. This would require adding the same kwarg to `UniqueConstraint`. The implementation would be a lot like the `condition` kwargs to both `Index` and `UniqueConstraint`. 

At the moment the only Django-supported database that can use this feature is Postgres but it's also supported by Microsoft SQL Server and IBM Db2 with the same syntax. Because if this I think it shouldn't be implemented as a postgres only feature but exposed on `BaseDatabaseSchemaEditor` to ease the adding of support when/if sqlite or mariadb adds support.

I have a proof of concept I'm working on and will create a PR soon if accepted."	New feature	assigned	Database layer (models, ORM)	dev	Normal		db-indexes		Unreviewed	0	0	0	0	0	0
