Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2021, 14:36   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 142
По умолчанию При update таблицы идет seq scan

Использую Postgresql, есть запрос в котором нужно обновить таблицу новыми значениями, а тех записей которых нет,
вернуть.
Приблизительно запрос выглядит так:

Код:
WITH ...(
.
.
.),
documents AS (
   SELECT
       ad."DocId"
	   d."EndDate",
	   d."Responsible",
	   d."Account"
   FROM documents_raw d
   LEFT JOIN "ActualDocument" ad
   ON (d."Account"=ad."Account" AND d."Responsible"=ad."Responsible")     
)
documents_upd AS(
   UPDATE "ActualDocument"
   SET "ActualDocument"."EndDate" = documents."EndDate"
   FROM documents
   WHERE "ActualDocument"."DocId"= documents."DocId" 
)
SELECT *
FROM documents_upd
WHERE "DocId" IS NULL


Проблема возникает при обновлении в CTE documents_upd
в плане Hash Join идет Seq Scan по таблице "ActualDocument".

Хочется чтобы использовался индекс по первичному ключу "DocId" таблицы "ActualDocument".
Например когда использую EXISTS или INNER JOIN в CTE, то используется индекс по первичному ключу "DocId"

Код:
WITH (...
.
.
.),
documents AS (
   SELECT
       ad."DocId"
	   d."EndDate",
	   d."Responsible",
	   d."Account"
   FROM documents_raw d
   LEFT JOIN "ActualDocument" ad
   ON (d."Account"=ad."Account" AND d."Responsible"=ad."Responsible")     
)
SELECT *
FROM "ActualDocument"
WHERE EXISTS (
SELECT TRUE
FROM documents
WHERE
"ActualDocument"."DocId"= documents."DocId" 
)
polin11 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При включении программы, идет проверка наличия файлов dubious Общие вопросы C/C++ 1 05.12.2017 19:33
UPDATE таблицы semak777 БД в Delphi 0 23.05.2012 18:12
UPDATE таблицы shtep PHP 1 29.10.2011 16:41
При создании поля SEQ как задать закладку? Traum Microsoft Office Word 4 22.10.2011 20:20
PHP+MySQL. Как выполнить UPDATE таблицы? ViTYAi PHP 5 24.12.2009 10:03