Eu passei pela documentação e pelas perguntas anteriores do stackoverflow, mas não encontrei as úteis. Postgres versão 10.6
Mesmo para o índice apenas verifica os valores de idx_tup_fetch estão aumentando. Portanto, não consigo entender a diferença entre idx_tup_read e idx_tup_fetch.
Inicialmente o entendimento foi: idx_tup_read: registros correspondentes lidos do índice.
idx_tup_fetch: linhas ativas buscadas na tabela depois que os registros são correspondidos no índice. Portanto, meu entendimento é que, apenas para o índice, verifica-se, pois nenhum dado é obtido da tabela, portanto, isso não deve ser incrementado.
Mas quando fiz os testes, esse entendimento não é verdade.
postgres=> select * from pg_stat_all_indexes where indexrelname like 'test_monika_rank';
relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
-------+------------+------------+-------------+------------------+----------+--------------+---------------
16413 | 16418 | public | test_monika | test_monika_rank | 4 | 2 | 2
(1 row)
postgres=> select * from test_monika where rank=100;
id | name | rank
----+------+------
95 | | 100
(1 row)
postgres=> select * from pg_stat_all_indexes where indexrelname like 'test_monika_rank';
relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
-------+------------+------------+-------------+------------------+----------+--------------+---------------
16413 | 16418 | public | test_monika | test_monika_rank | 5 | 3 | 3
(1 row)
postgres=> select rank from test_monika where rank=100;
rank
------
100
(1 row)
postgres=> select * from pg_stat_all_indexes where indexrelname like 'test_monika_rank';
relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
-------+------------+------------+-------------+------------------+----------+--------------+---------------
16413 | 16418 | public | test_monika | test_monika_rank | 6 | 4 | 4
(1 row)
postgres=> select id from test_monika where rank=100;
id
----
95
(1 row)
postgres=> select * from pg_stat_all_indexes where indexrelname like 'test_monika_rank';
relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
-------+------------+------------+-------------+------------------+----------+--------------+---------------
16413 | 16418 | public | test_monika | test_monika_rank | 7 | 5 | 5
(1 row)
postgres=> select 1 from test_monika where rank=100;
?column?
----------
1
(1 row)
postgres=> select * from pg_stat_all_indexes where indexrelname like 'test_monika_rank';
relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
-------+------------+------------+-------------+------------------+----------+--------------+---------------
16413 | 16418 | public | test_monika | test_monika_rank | 8 | 6 | 6
(1 row)