Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизировать запрос с array_replace 
:(
    Опции темы
polin11
Дата 9.12.2022, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



Есть таблица 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

    
Но он много потребляет shared hit.

Код

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,
нет мыслей как это сделать.
Как-то переписать запрос или изменить индекс не получается
PM MAIL   Вверх
Akina
Дата 9.12.2022, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 453



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.