Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1a4Fyy-0000Cn-NR for pgsql-performance@arkaria.postgresql.org; Wed, 02 Dec 2015 22:34:40 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1a4Fyy-0007Mh-A2 for pgsql-performance@arkaria.postgresql.org; Wed, 02 Dec 2015 22:34:40 +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 1a4FxI-0005U7-US for pgsql-performance@postgresql.org; Wed, 02 Dec 2015 22:32:57 +0000 Received: from mail-bn1bon0068.outbound.protection.outlook.com ([157.56.111.68] 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 1a4FxF-00042j-L7 for pgsql-performance@postgresql.org; Wed, 02 Dec 2015 22:32:55 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jim.Nasby@bluetreble.com; Received: from unknownc0eefb20edf7.att.net (2602:306:c4a9:2b00:10de:480d:3b61:a661) by CY1PR11MB0684.namprd11.prod.outlook.com (10.163.236.22) with Microsoft SMTP Server (TLS) id 15.1.337.19; Wed, 2 Dec 2015 22:32:49 +0000 Subject: Re: Index scan cost calculation To: Jeff Janes , Glyn Astill References: <1322503558.4427005.1448892201990.JavaMail.yahoo@mail.yahoo.com> CC: Pgsql-performance From: Jim Nasby Message-ID: <565F718B.7080802@BlueTreble.com> Date: Wed, 2 Dec 2015 16:32:43 -0600 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [2602:306:c4a9:2b00:10de:480d:3b61:a661] X-ClientProxiedBy: CY1PR12CA0046.namprd12.prod.outlook.com (25.163.230.14) To CY1PR11MB0684.namprd11.prod.outlook.com (25.163.236.22) X-Microsoft-Exchange-Diagnostics: 1; CY1PR11MB0684; 2:oz6sNRAZjR8zjKEz5oIBGEag/4qbK74JDXrymPAsR89cekYArvrfMMlIVIzoVFwTYtM8E71lqyYZfeSJf/SHVSzXIIeK3VIjPfKZdLC54kuXuKQRC/vcDlFAMtdjb/UA33BsB7CZD6Qj9PF/egOV0Q==; 3:2o22vC97eE3Xm/INizXT/KrsX7k7fUPma5FojWzm28esrsYlTy1HEirzOawZwlNkr78dZ7zYYKSvBzARK92tCINOn2BKrNXeHIL8XvROG91UXNA2FHtoWSMm6d6l/GFR; 25:sf8q5b+Jgc9lhndmuU0gIDcq6Kw6ImgdCEU/2OiymERXaTCn86UpXRcJ1hC9+EiKhUYIyqPc5ikgnwwL8mRcAFEDuB/QimY+QYmdQKZmCNJ2qP3cpdQihu3ceXMNLTSzrLcgd5skB/xFF9Y1p3QZkotkDHAhSVwW32DSBuc8/VS7y1T9uMctq1Ne4KjqCBjRMCkU+XV42I/Z9+9UfCrdDfu8J+S0LX4d1I6bV4GVqvCwxAwyONHLp+oEA42/D8lIanIC5jZ0HglZHzWs8Q/dsQ==; 20:/t4OCgxgmqJe36GwUbYNOXDkAFD+OVPoUonr1Lq9iWVNcpQ+CsoMNS0ApQDLIU55x8hFYFtix1AnwN+PKSwiqGoBtxHrXJxYLyT0ci/FCdo3r0kuXlk+CUXd0nXYgll5L82CxPsKJ4A6H5FfGgJlGMvIAjQXBmgQKCVE4KXY97w= 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)(2401047)(5005006)(8121501046)(520078)(3002001)(10201501046); SRVR:CY1PR11MB0684; BCL:0; PCL:0; RULEID:; SRVR:CY1PR11MB0684; X-Microsoft-Exchange-Diagnostics: 1; CY1PR11MB0684; 4:wRGdgMQOCGHBMZzxJXnvGXSPloeIz/PB9RXbR2zy7z1fxfVbDPSNTAWpFs3MMdRHLvTS5giIW8AHn2kOazUSALT0eigSHKAJn/BjxIheCcrcX5Xd3uJMaMtBb+/xc/eizIgif7jVi9W0/9ZEGyGv8nZZ/R+RbGr24uzjRTUyxr8sIlvsrLazSXXzF8SY//ho/KgniKLY0Kyk98I2V3NfqRG2kGEbFbDjaxq54x+tyBYMTqmBmjZrYGHhrjg126b/T42yBK5OG/7h0FvEYfW+Ht0lFmfFW5DP9iA2zW77r+vBKQ2k82e1FRyLpVi+EHOnw+m1+Cv+y3DlpsTnxiwR69clHadAu7f//BMGHH7eS4D7HJFD6je8X3CNAOWEAazc X-Forefront-PRVS: 077884B8B5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(199003)(24454002)(189002)(479174004)(377454003)(105586002)(122386002)(65806001)(47776003)(83506001)(86362001)(36756003)(106356001)(65956001)(23676002)(92566002)(189998001)(33656002)(42186005)(5001770100001)(53416004)(64126003)(87976001)(2950100001)(2521001)(101416001)(5008740100001)(230700001)(4001350100001)(97736004)(40100003)(5004730100002)(6116002)(15975445007)(50986999)(1096002)(65816999)(76176999)(50466002)(87266999)(586003)(54356999)(59896002)(77096005)(80316001)(19580395003)(3076002)(3826002)(85282002)(336755003)(18886065003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR11MB0684; H:unknownc0eefb20edf7.att.net; 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: =?utf-8?B?MTtDWTFQUjExTUIwNjg0OzIzOjkySVJOMlNiK0JJaFFFQ2lPbkp2Nnc0S21O?= =?utf-8?B?c0VFOFB2V3NjOWk0KzBkRFNUQ0xwd1l3cW1FcUVLZHNzU3B3SHYySTY5M0Z0?= =?utf-8?B?V3dKWi9Vdm1aS09heWRTR2JpU0xQbU1lOXhaQThnOHBhMnl4cjBVSzhUZFdM?= =?utf-8?B?Q1RWZzViM25zZEtRTloxS1VJa2l3ZEdFVHUvemwwZTdoai9xSjNjb0xRMzEw?= =?utf-8?B?Z3V4MXhaSCt4MG1mQmU5Zk8yYzl6aTNaVDYyY3U3bG9mRGZwK3c4NW0zTmlC?= =?utf-8?B?YmsvUnpDZ0dKWFkzcVBlNUNqdksxMjJoakRxYUZNanJ4QVlYKzlyQklFNHJU?= =?utf-8?B?bVp1RUU1ejFBVFgzVjJLaUhQZ1hxVU4xZTdBZVAzSnk3bldIdjE4SGtEb0tu?= =?utf-8?B?WGlCekptcVl6VTJaYTJ2RVExVzF5MnByeUpxdDVzSHZ1ZFdnNlB0MGZUUFMw?= =?utf-8?B?TTBzTjh3eXRzTEh5V3F6eXhzUTcwRHZEU0kvU0hzQk5qUjErOXNRRWRTelo4?= =?utf-8?B?QjJHNWpFNkx0NEI0OTloM3BXNmVZNFRTd2dmRDQ1U09POElvMWVYQWg3WFYv?= =?utf-8?B?S3M2amZYMXJxeHZ3bW90RjNuL2dONC82ZnpqT29yRWVCOGxRQ1BnSCtXeHhs?= =?utf-8?B?azBCUi9jM3ZZVkdId0pMY0ErVGVJQTlwSk9kTWRLdW9EdEJENWVheS9xZDY1?= =?utf-8?B?TTBoSlJ6SXBETzBHNnhOZ0NrVVNObVVvUERYUHhlTGVyMHc0dEhralRaTExU?= =?utf-8?B?WW9qZkt5b0VsYkZibWhUVE5KYzJDRHpOZXhiRVZWQlU0eFMrY2RVa2t3ZjFJ?= =?utf-8?B?WFJsSGl5VE5QMkJmL1VTNTRSNnB2ejVKUDdHd2FNd2xXRGNGL0owTldoT2tW?= =?utf-8?B?SFZFS0hXRlNlaC96d0xzcHVNNS9NRU53dTdvb1EydzhPcVBVclJFWEFhRmtq?= =?utf-8?B?emZUVDljQXpZQnppemh2UHRmcFE4Z0tkZ3dTTGRZeUx3Z2tkd3AxWFNVcXFQ?= =?utf-8?B?a01PMHl0cExPbjlpaGg4cmtucjRBbC9oMHpNazE0REI2UmcvNTY2S2MvRlJt?= =?utf-8?B?ektjcytPWndYWG1kdlMzSkxLbS9RVHFrTUIzOXEybmpoam10VVRPSWpmRFdo?= =?utf-8?B?Wmhob0NzV2phbUs4T05iMGo4Y1lHend2Q29sNnZuZ283Vkd1MmFzUXp2aUps?= =?utf-8?B?ZVdPaDB3V094QU9YcGx4Tno3M0crWURpSDVPTFZjUWJYTHorTVZRTmhGbmMr?= =?utf-8?B?UXdpRG5DV05aNStVNnpqUDZiRnA2Q0F3Z3NvU1FqR1dDSVBVdnhDUDRlTUdY?= =?utf-8?B?OUZOd1hCYitHRFdJNWNSakU2V0xmWGU3d3N3d09lMUMrYWMyREJYWXhTTXI4?= =?utf-8?B?VDBKMTZWUnptdEM0cDV4L0ZaUmVaa3VPZlExa2hsWHlPSWZaZjFzMnB2N2gx?= =?utf-8?B?bm1NZXRxREU3RVdGVXB2YTJ1R1pVdEFHUUJNN2NlWHNCT1RFKzRTZEFFQnpE?= =?utf-8?B?MlFoTlEzcFNZZis1OTlTdUtsMjFRZnRvRnQ0bFNtMnlCVE1ldG0zMkIvNTI3?= =?utf-8?B?RW9HcXVlWEo3bEVHeExtN1JVaHhPRlJHVmtTb2FzTkdWOTBuZ0I5dVZ4L05m?= =?utf-8?B?Rmg5d2hpT1BNcE9PWk4yRXg4NjQzcXhVQ1Z1bjJlN0lZdjNJcFNNWGpFbHNy?= =?utf-8?B?VHVLeG5pcHhCVjAyOFBxOURBbHNZZ0ZiL1pqVU5jVGJGeUc0MjdYclJ3NEd3?= =?utf-8?B?bWhQRkoxV0VUVW12NUhaUnVab2hOZHFPOFBaMUpKUUtwTnVBQ3dJUFhBY3Uv?= =?utf-8?Q?CXW4Ql3qd4efO?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR11MB0684; 5:8wmdvJjRoMvzeyRWavxl7HI5Nu3nSvRw4YVCvLpKP+YZqxYTWFezfPwn2seXyAogF+etIbgcxYFv1MG5N1L/B0foDv++uiXn92vuprf4bgbLkf3+zyUS1JS/woaku0/6ilTKDjkkzY1b5siQBp+oEw==; 24:s0wPaBQKHsXHG7Qq14HZWoJLXb8iMl5A2QwoOnx8Jt5aQRhgdRcHLWzgBV3VTLnaigeDcEwRIJPciXe1R7IuuIxXyM298iejSRAulWKx3ac= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: bluetreble.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2015 22:32:49.0390 (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-performance Precedence: bulk Sender: pgsql-performance-owner@postgresql.org On 11/30/15 5:03 PM, Jeff Janes wrote: > It thinks the combination of (show, type, best, block) is enough to > get down to a single row. One index adds "flag" to that (which is not > useful to the query) and the other adds "row" to that, which is useful > but the planner doesn't think it is because once you are down to a > single tuple additional selectivity doesn't help. It occurs to me that maybe you could force this behavior by building an index on a row() instead of on the individual fields. IE: CREATE INDEX ... ON( row(show, type, best, block, row) ) You would then have to query based on that: WHERE row(show, type, best, block, row) = row( 'Trans Siberian Orchestra', 'Music', true, 1, 1 ) You mentioned legacy code which presumably you can't modify to do that, but maybe there's a way to trick the planner into it with a view... CREATE VIEW AS SELECT r.show, r.type, r..., etc, etc FROM ( SELECT *, row(show, type, best, block, row) AS r FROM table ) a ; When you stick a where clause on that there's a chance it'd get turned into WHERE row() = row()... but now that I see it I'm probably being over optimistic about that. You could probably force the issue with an ON SELECT ON table DO INSTEAD rule, but IIRC those aren't supported. -- 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-performance mailing list (pgsql-performance@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance