Как узнать, является ли строка частью индекса? - PullRequest
1 голос
/ 13 мая 2019

Я хочу найти, является ли строка частью индексированного столбца в postgresql.

Например: Когда я открываю объект таблицы, я вижу свои индексы и количество элементов каждого индекса.

мои общие строки в таблице - 1,45,454, но количество элементов всех индексов - 1,45,300. Около 150 нечетных строк не проиндексированы ни в одном из созданных мной индексов.

Я выполнил приведенный ниже запрос, чтобы найти число элементов,

SELECT relname, 
       relkind, 
       reltuples AS cardinality, 
       relpages 
FROM   pg_class 
WHERE  relname LIKE '%table_name%'; 

Может кто-нибудь объяснить, почему некоторые строки оставлены как часть индексации и как найти строки из 150 строк, которые не проиндексированы в моей исходной таблице.

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

общее количество строк в таблице составляет 1,45,454, но количество элементов всех индексов составляет 1,45,300

, что означает, что у вас есть 154 дублированных индексаТаким образом, некоторые из этих 154 записей индекса (или менее) указывают на более чем 1 строку (или более).

1 голос
/ 13 мая 2019

Из документации postgres по статистике планирования :

Из соображений эффективности reltuples и relpages не обновляются на лету, поэтому они обычно содержат несколько устаревших значений. Они обновляются с помощью VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX. Операция VACUUM или ANALYZE, которая не сканирует всю таблицу (что обычно имеет место), будет постепенно обновлять счетчик reltuples на основе части таблицы, которую он сканировал, что приведет к приблизительному значению. В любом случае планировщик масштабирует значения, найденные в pg_class, в соответствии с текущим размером физической таблицы, таким образом получая более близкое приближение.

Другими словами, до тех пор, пока это число приблизительно правильное, нет ничего плохого и не о чем беспокоиться. Если бы он был дико отключен (скажем, «203» вместо его текущего значения), тогда пришло бы время для выполнения задания VACUUM или ANALYZE для таблицы.

Также стоит проверить значение default_statistics_target. Если он установлен слишком низко, ваша статистика будет становиться все менее и менее точной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...