Re: Index Skip Scan - Mailing list pgsql-hackers
From | Tomas Vondra |
---|---|
Subject | Re: Index Skip Scan |
Date | |
Msg-id | 20190623131031.65zmz2m4waew6paa@development Whole thread Raw |
In response to | Re: Index Skip Scan (Dmitry Dolgov <9erthalion6@gmail.com>) |
Responses |
Re: Index Skip Scan
|
List | pgsql-hackers |
Hi, I've done some initial review on v20 - just reading through the code, no tests at this point. Here are my comments: 1) config.sgml I'm not sure why the enable_indexskipscan section says This parameter requires that <varname>enable_indexonlyscan</varname> is <literal>on</literal>. I suppose it's the same thing as for enable_indexscan, and we don't say anything like that for that GUC. 2) indices.sgml The new section is somewhat unclear and difficult to understand, I think it'd deserve a rewording. Also, I wonder if we really should link to the wiki page about FSM problems. We have a couple of wiki links in the sgml docs, but those seem more generic while this seems as a development page that might disapper. But more importantly, that wiki page does not say anything about "Loose Index scans" so is it even the right wiki page? 3) nbtsearch.c _bt_skip - comments are formatted incorrectly _bt_update_skip_scankeys - missing comment _bt_scankey_within_page - missing comment 4) explain.c There are duplicate blocks of code for IndexScan and IndexOnlyScan: if (indexscan->skipPrefixSize > 0) { if (es->format != EXPLAIN_FORMAT_TEXT) ExplainPropertyInteger("Distinct Prefix", NULL, indexscan->skipPrefixSize, es); } I suggest we wrap this into a function ExplainIndexSkipScanKeys() or something like that. Also, there's this: if (((IndexScan *) plan)->skipPrefixSize > 0) { ExplainPropertyText("Scan mode", "Skip scan", es); } That does not make much sense - there's just a single 'scan mode' value. So I suggest we do the same thing as for unique joins, i.e. ExplainPropertyBool("Skip Scan", (((IndexScan *) plan)->skipPrefixSize > 0), es); 5) nodeIndexOnlyScan.c In ExecInitIndexOnlyScan, we should initialize the ioss_ fields a bit later, with the existing ones. This is just cosmetic issue, though. 6) nodeIndexScan.c I wonder why we even add and initialize the ioss_ fields for IndexScan nodes, when the skip scans require index-only scans? 7) pathnode.c I wonder how much was the costing discussed. It seems to me the logic is fairly similar to ideas discussed in the incremental sort patch, and we've been discussing some weak points there. I'm not sure how much we need to consider those issues here. 8) execnodes.h The comment before IndexScanState mentions new field NumDistinctKeys, but there's no such field added to the struct. 9) pathnodes.h I don't understand what the uniq_distinct_pathkeys comment says :-( 10) plannodes.h The naming of the new field (skipPrefixSize) added to IndexScan and IndexOnlyScan is clearly inconsistent with the naming convention of the existing fields. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
pgsql-hackers by date: