Re: PATCH: index-only scans with partial indexes
| От | Tomas Vondra |
|---|---|
| Тема | Re: PATCH: index-only scans with partial indexes |
| Дата | |
| Msg-id | 560AC2CD.2080802@2ndquadrant.com обсуждение исходный текст |
| Ответ на | Re: PATCH: index-only scans with partial indexes (Tomas Vondra <tomas.vondra@2ndquadrant.com>) |
| Ответы |
Re: PATCH: index-only scans with partial indexes
|
| Список | pgsql-hackers |
On 09/29/2015 04:57 PM, Tomas Vondra wrote:
> Hello,
>
> On 09/29/2015 12:27 PM, Kyotaro HORIGUCHI wrote:
...
>>
>> cost_index() seems to need to be fixed. It would count excluded
>> clauses in estimate.
>
> Hmm, good point. The problem is that extract_nonindex_conditions uses
> baserel->baserestrictinfo again, i.e. it does not skip the implied
> clauses. So we may either stick the filtered clauses somewhere (for
> example in the IndexPath), teach extract_nonindex_conditions to use
> predicate_implied_by. I'd say the first option is better. Agreed?
And the attached patch v4 should do the trick - it adds 'indexrinfos' to
IndexPath and uses it in cost_index().
CREATE TABLE t AS SELECT i AS a, i AS b, i AS c
FROM generate_series(1,1000) s(i);
CREATE INDEX idx ON t(a) WHERE b > 1000;
Then
SELECT a FROM t WHERE b > 1000 AND a < 1000; /* size(qpquals) = 0 */
SELECT a FROM t WHERE b > 1000 AND c < 1000; /* size(qpquals) = 1 */
SELECT a FROM t WHERE c > 1000 AND c < 1000; /* size(qpquals) = 2 */
and so on. Which seems correct I believe.
regards
--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Вложения
В списке pgsql-hackers по дате отправления: