Разница между idx_tup_read и idx_tup_fetch на Postgres

12

На Postgres 8.4, когда вы делаете:

select * from pg_stat_all_indexes where relname = 'table_name';

Он возвращает поля idx_tup_read и idx_tup_fetch, в чем разница?

Саймон
источник

Ответы:

13

Если вы посмотрите на исходный код представления, то увидите, что idx_tup_readэто результат вызова pg_stat_get_tuples_returned()и idx_tup_fetchрезультат вызоваpg_stat_get_tuples_fetched()

Руководство описывает две функции следующим образом:

pg_stat_get_tuples_returned (OID)

Количество строк, прочитанных при последовательном сканировании, когда аргумент является таблицей, или количество записей индекса, возвращаемых, когда аргумент является индексом

pg_stat_get_tuples_fetched (OID)

Число строк таблицы, выбранных при растровом сканировании, когда аргумент является таблицей, или строк таблицы, выбранных при простом сканировании индекса с использованием индекса, когда аргумент является индексом

a_horse_with_no_name
источник
1

Из документов postgresql ,

idx_tup_read is number of index entries returned by scans on this index
idx_tup_fetch is number of live table rows fetched by simple index scans using this index

Итак, reads - это когда индекс возвращает позицию требуемой строки, а fetches - когда индекс возвращает сами строки таблицы.

Devi
источник
0

На официальной странице документации написано, что разница между ними появляется:

  1. когда индекс участвует в сканировании индекса растрового изображения
  2. если какие-либо мертвые или еще не зафиксированные строки извлекаются с использованием индекса
  3. если какой-либо выборки кучи исключается с помощью сканирования только по индексу
  4. когда к индексу обращаются проверки оптимизатора

Во всех этих случаях idx_tup_readстановится больше, чем idx_tup_fetch.

volvpavl
источник