> I am unable to decide whether reporting the bound quals is just enough to 
> decide the efficiency of index without knowing the difference in the number 
> of index tuples selectivity and heap tuple selectivity. The difference seems 
> to be a better indicator of index efficiency whereas the bound quals will 
> help debug the in-efficiency, if any. 
> Also, do we want to report bound quals even if they are the same as index 
> conditions or just when they are different?

Thank you for your comment. After receiving your comment, I thought it would be 
better to also report information that would make the difference in selectivity 
understandable. One idea I had is to output the number of index tuples 
inefficiently extracted, like “Rows Removed by Filter”. Users can check the 
selectivity and efficiency by looking at the number.

Also, I thought it would be better to change the way bound quals are reported 
to align with the "Filter". I think it would be better to modify it so that it 
does not output when the bound quals are the same as the index conditions.

In my local PoC patch, I have modified the output as follows, what do you think?

=# EXPLAIN (VERBOSE, ANALYZE) SELECT * FROM test WHERE id1 = 1 AND id2 = 101;
                                                       QUERY PLAN               
                                         
-------------------------------------------------------------------------------------------------------------------------
 Index Scan using test_idx on ikedamsh.test  (cost=0.42..8.45 rows=1 width=18) 
(actual time=0.082..0.086 rows=1 loops=1)
   Output: id1, id2, id3, value
   Index Cond: ((test.id1 = 1) AND (test.id2 = 101))  -- If it’s efficient, the 
output won’t change.
 Planning Time: 5.088 ms
 Execution Time: 0.162 ms
(5 rows)

=# EXPLAIN (VERBOSE, ANALYZE) SELECT * FROM test WHERE id1 = 1 AND id3 = 101;
                                                          QUERY PLAN            
                                               
-------------------------------------------------------------------------------------------------------------------------------
 Index Scan using test_idx on ikedamsh.test  (cost=0.42..12630.10 rows=1 
width=18) (actual time=0.175..279.819 rows=1 loops=1)
   Output: id1, id2, id3, value
   Index Cond: (test.id1 = 1)                 -- Change the output. Show only 
the bound quals. 
   Index Filter: (test.id3 = 101)              -- New. Output quals which are 
not used as the bound quals
   Rows Removed by Index Filter: 499999    -- New. Output when ANALYZE option 
is specified
 Planning Time: 0.354 ms
 Execution Time: 279.908 ms
(7 rows)

Regards,
--
Masahiro Ikeda
NTT DATA CORPORATION

Reply via email to