Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZbbZ5-0007MS-KP for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Sep 2015 21:45:31 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZbbZ4-0006nL-1m for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Sep 2015 21:45:30 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZbbZ3-0006nE-9G for pgsql-hackers@postgresql.org; Mon, 14 Sep 2015 21:45:29 +0000 Received: from mail-bn1bon0080.outbound.protection.outlook.com ([157.56.111.80] helo=na01-bn1-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZbbYu-0002P0-PC for pgsql-hackers@postgresql.org; Mon, 14 Sep 2015 21:45:27 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jim.Nasby@bluetreble.com; Received: from decina.local (70.113.16.71) by CY1PR11MB0684.namprd11.prod.outlook.com (10.163.236.22) with Microsoft SMTP Server (TLS) id 15.1.268.17; Mon, 14 Sep 2015 21:45:07 +0000 Subject: Re: [PROPOSAL] Covering + unique indexes. To: Thomas Munro , Teodor Sigaev References: <55F2C1BC.3010109@postgrespro.ru> <55F2CCD0.7040608@postgrespro.ru> <55F6F7AD.4080307@BlueTreble.com> <55F70D0A.2030503@sigaev.ru> CC: Anastasia Lubennikova , pgsql-hackers From: Jim Nasby Message-ID: <55F73FDA.2030001@BlueTreble.com> Date: Mon, 14 Sep 2015 16:44:58 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [70.113.16.71] X-ClientProxiedBy: BY2PR06CA021.namprd06.prod.outlook.com (10.141.250.139) To CY1PR11MB0684.namprd11.prod.outlook.com (25.163.236.22) X-Microsoft-Exchange-Diagnostics: 1; CY1PR11MB0684; 2:8i/rPQn1eqLQFqJcV0yGuV154jA/dy2I44b9X6220fSC/7JzrMy9Nx+yI9j6Xm3+w509lPCbALcWjHHtmjAwI8SoM14SdJbs5xDTeempQW25w9ugjkEAuA0WO0eml35q4ymRvkLFUMBfs26OEP3MqS88EcrabO8aZ3VZwrW2+g0=; 3:1xORHD6kJEYLWU1LI1sI4dBJQe69Fov2S5rlwhZAsWK5dvU+pICwDiuUL1B2CMce1gpvCrXD8rP9bwxF5ulJMxdJ6GwiACheSvhvR0KWHNifECRgoFlgv2FCAZarUkn63PYvz+1KDZRe8Tz6w7ilVA==; 25:f70QYDGJ3AHezSI4pXUk8jol/YC3S16rD8agdwbszjX23kamVrPLFWNr4oEz1pYRpLZtp5ag+IP4bdH8cmdsOevMVvE1UWm2zBqpValJt+wJHVLBZYq3ZsryoNfZjbrMu4oOFDGxjNmW7WI4pBI1bv/x9/I3yT+Be5VQlhPL8KNC2PLlmlAPOS7e7eijo1rwjsl4doUUfi2vGsOCvDpVFGvapNB1+YxXhgv0L7R7fVDb3DDafpCcijpFi09OhgAw; 4:v2QiNl4A01Qf/xMj2cYgzXbEpkL0HuNHsl3KXRo3J3H4BrkB52ntrMVB+62xCbgDKquRi0HgH8UwYdSzf6zvpEW0+TeHClzaNCO0m0BIW3au+U5+DX000/LoI2Tt3bF9xBFwgjVYyM22fomN5vznS+IeoeOSgVMUSi+7HNlfruPar91RlvA5mG/eOi8prVs3GAFxu032EK5eonJQj06BAxShYZ1RQjPhDeno3aBePj8d7K1RvozsFlInXrBUSu2q5/pvLoQ3bXQSqlSMbtiZdwUrLvFCZFxUTlFsaacS5n7u5v1wk2WZHY50RBGCxg4OAegFMZJZjNxi32rHl94QWs21i+3P81HkQM0Wt4W/NK8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR11MB0684; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(8121501046)(5005006)(520078)(520075)(3002001); SRVR:CY1PR11MB0684; BCL:0; PCL:0; RULEID:; SRVR:CY1PR11MB0684; X-Forefront-PRVS: 0699FCD394 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(199003)(377454003)(51694002)(479174004)(189002)(24454002)(65806001)(65956001)(23746002)(66066001)(5001830100001)(19580395003)(46102003)(40100003)(5001770100001)(47776003)(64126003)(50466002)(64706001)(77156002)(80316001)(62966003)(68736005)(122386002)(59896002)(15975445007)(86362001)(93886004)(42186005)(77096005)(81156007)(87266999)(65816999)(106356001)(54356999)(4001350100001)(4001540100001)(97736004)(33656002)(50986999)(2950100001)(36756003)(76176999)(5001860100001)(5001920100001)(105586002)(83506001)(101416001)(92566002)(5004730100002)(5007970100001)(5001960100002)(189998001)(87976001)(200143003)(85282002)(336755003)(18886065003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR11MB0684; H:decina.local; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: bluetreble.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; CY1PR11MB0684; 23:gXqzU5385SWvBfYll4PWPxjnxyoJqiQDfhU5c?= =?Windows-1252?Q?o7SY3uqRDKra5DDuSk7lLYC3CmYQqksyGEZs7JReFe2q5qMzmDaskr4X?= =?Windows-1252?Q?Q8amu9xyeAKL5VsDQ+dl2xhTyo4CeY0HVGDuW0KSp6U1EaCmnGSul7RL?= =?Windows-1252?Q?cYn/dAtg6ZBPH1erQlWPlj6wn5lkAqOjrmNLpRVauItrk7hR7WbcE4kR?= =?Windows-1252?Q?DGoxA/0WI7PPBtvEtdcZ9ZPhHIfHI9veoBjIeb604uxZ9ySUPqaH7afZ?= =?Windows-1252?Q?x2olrUqkTupWtqznjeoj0ikHHoNY+pqhHR0QUxD2PSTzvvVem5JpvJSq?= =?Windows-1252?Q?wXLj1X4HOiIGf5f66z4xQ4I8T4bh2MahMPZqQatP8oxeg98KirrJ9QKw?= =?Windows-1252?Q?alvQNZGr288ZVlHk0EGmbKpF41i5TX6B7BHfoAm3UEJ6XscahVbK+DfW?= =?Windows-1252?Q?HSgyp65nImk2OBeCzsD4LDfCc0C7rbL84J65tY+tUWaU0FjM0LBIID7O?= =?Windows-1252?Q?OVprlz8WlzXJRvDXjgRZBHkvn2KfOB4+vT8Do1IxAQ1KrRfwvpjdUJ9V?= =?Windows-1252?Q?qXNO32fY8HYjZuGcZp+sV/MSEbfDLjbbISWs3ufPFk5p39EctlSjJbyf?= =?Windows-1252?Q?BiSnrS4JZn3gEd63V52Cln8YJSyEURchgKZZSJJ0Km1lEaK4Mv/u32s5?= =?Windows-1252?Q?Lku+Ng+s10+L4SE7jMU7Rp68eMKWV/upoTP0IC4zl+wcjGdAUHZP4jXO?= =?Windows-1252?Q?G6ee9efuCR/ZFx9CLvXNQzGJbJfe3CChsvOdq0b630uD+7TWkLZoVlX9?= =?Windows-1252?Q?zO0O0aabfL3dOUHn+5ALSmdC5ScqFjtMoBGm1p1yjCgzZqZ8QjWw+ywS?= =?Windows-1252?Q?KeZYvORS5E1KbnpagRux4ucZKqw/Hki1JbEWebgip0T28TEJptvJm4AJ?= =?Windows-1252?Q?6i+YVa9BM/K76CTIs3IlZBc7gm5H0I68cJoOPOozlXXrWhV+3eQg7X3J?= =?Windows-1252?Q?IApEjXoPxoqHRB4eV1xrgRlESuvu6fd2tIw630ISrw5hUQRtnrSjxOQe?= =?Windows-1252?Q?XLgJW1r5bmqq99iCF+ZUrFbg2xvTJvVVk6/kXspthtpvU9ihSVw83kwO?= =?Windows-1252?Q?8mgS4SdNWiIVQ+7MLKSYghwd7gasqouJsp5vxyRENkFYyZmIDIVxmqD9?= =?Windows-1252?Q?18zK89220Y+Z2cEepwzsaBjBsEgZSbbVpmx1Y7p4czgTdRM2bNeruebm?= =?Windows-1252?Q?32d712TOi3J9WbzK9djU6ZRyS3qqYE8VwISFhwpPYpEjFbHLJLoWfh5W?= =?Windows-1252?Q?vsUthDYf6GiLRY6USfG4d4A4/kIBXs3S9HAq4+bc0wvTsfMkqJbMoagH?= =?Windows-1252?Q?Y8Q6DmWNQquQIc0tym/tj0jpP/L1chj4sS7AYOFPXX1r0aOFSMnIVKed?= =?Windows-1252?Q?9ete0SkD4yR387A+kYcIGfeRlq0eU8/Xnll/YP8jKnbdRMoiO9Z5Frlc?= =?Windows-1252?Q?GdW1xPRmmUoaV68eXvC8LSnxiKy7vVMu6+Xy1GrqODA0yvVSusbFl9uK?= =?Windows-1252?Q?wLHsT9UxSXKZW/Zt7/OLRn/zCcxGXVv5VgD61WLN1daK77eQ27Qk6vyL?= =?Windows-1252?Q?WJHlYTJ8uzs1v03byW7ssIGDus3MC8VaH224HABkz0k5WOzcZat5rm4Q?= =?Windows-1252?Q?qRtPllpqA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR11MB0684; 5:yEzVjGBm3TarfuMSaC7j7UZmLa5wygK9GZnrE3RKVdKF/W0jDezGmYZuN2sTA9N1mshzneaDKPs2jDAowGXcifn6/BTW6puCsJ4kfm/LYKT+BYdbdOlpyB20g224y++p+uEjpnROsjDqqFuW9FgaWw==; 24:1ykiamTpP4YtKngr+bKGjXdD+P48LGXKmVURyZOZ5clKJmOcdRH4koUWWF9I4bdVl0vgAzimvqaF4ZCVH0UtMh8AuNZ6oTL6mmNcJBNO9/o=; 20:jMJwrD1fHMBYAz7uCeOZZ1Rho/qvuk5hAIMqVcUPpZkKzSXD/sn/1TG5LfZRaDYldENelT3ftLTaC2uDHg6n/g== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: bluetreble.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Sep 2015 21:45:07.7069 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR11MB0684 X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org On 9/14/15 1:50 PM, Thomas Munro wrote: > CREATE [UNIQUE {ON FIRST {COLUMN | n_unique_column COLUMNS}} > INDEX ON > table_name (column_name1, column_name2 ...); > > > I would use the first (simple) syntax and just throw an error if the > user tries to skip a column on the UNIQUE clause. > > Seems, second option looks as more natural extension of CREATE > UNIQUE INDEX True, but it's awefully verbose. :( And... > It surprised me that you can INCLUDE extra columns on non-UNIQUE > indexes, since you could just add them as regular indexed columns for > the same effect. It looks like when you do that in SQL Server, the > extra columns are only stored on btree leaf pages and so can't be used > for searching or ordering. I don't know how useful that is or if we > would ever want it... but I just wanted to note that difference, and > that the proposed UNIQUE ON FIRST n COLUMNS syntax and catalog change > can't express that. ... we might want to support INCLUDE at some point. It enhances covering scans without bloating the heck out of the btree. (I'm not sure if it would help other index types...) So it seems like a bad idea to preclude that. I don't see that UNIQUE ON FIRST precludes also supporting INCLUDE. Presumably we could do either CREATE INDEX ... ON table (f1, f2, f3) UNIQUE(f1, f2) INCLUDE(f4); or CREATE UNIQUE ON FIRST 2 COLUMNS INDEX ... ON table (f1, f2, f3) INCLUDE(f4); Personally, I find the first form easier to read. Are we certain that no index type could ever support an index on (f1, f2, f3) UNIQUE(f1, f3)? Even if it doesn't make sense for btree, perhaps some other index could handle it. -- Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX Experts in Analytics, Data Architecture and PostgreSQL Data in Trouble? Get it in Treble! http://BlueTreble.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers