Есть таблица Responsible, столбец Documents (тип bigint) ид. документа, User(тип []text) - массив пользователей. Нужно при смене пользователя, обновить этого пользователя в массиве User.
Есть такой запрос
UPDATE
"Responsible"
SET
"User" = array_replace(
"User"
, 'Петров'::text
, 'Иванов'::text
)
WHERE
"Documents" = ANY('{3}') AND
array_position("User", 'Петров'::text) IS NOT NULL
Update on "Responsible" (cost=0.43..99802.28 rows=154773 width=74) (actual time=179.690..179.691 rows=0 loops=1)
Buffers: shared hit=136800
-> Index Scan using "iDocuments" on "Responsible" (cost=0.43..99802.28 rows=154773 width=74) (actual time=179.688..179.688 rows=0 loops=1)
Index Cond: ("Documents" = ANY ('{3}'::bigint[]))
Filter: (array_position("User", 'Петров'::text) IS NOT NULL)
Rows Removed by Filter: 149754
Buffers: shared hit=136800
Используется индекс по Documents, хочется уменьшить потребление shared hit, нет мыслей как это сделать. Как-то переписать запрос или изменить индекс не получается