Слишком долгое время выполнения запроса на обновление - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь обновить таблицу с помощью запроса, который выполняется через ~ 5 секунд в Postgresql и Oracle, но занимает слишком много времени в Firebird 2.5.

UPDATE GoodsCatUnit SET isDisplay=1 
WHERE Id In (SELECT Min(gcu.Id) FROM GoodsCatUnit gcu GROUP BY gcu.GoodsCat_Id);

В строках GoodsCatUnit ~ 34k и обновление первых 200 занимает 15 секунд.

1 Ответ

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

Попробуйте написать это, используя коррелированный подзапрос и определив индекс.

Запрос:

UPDATE GoodsCatUnit gcu
    SET isDisplay = 1 
    WHERE gcu.id = (SELECT MIN(gcu2.id) 
                    FROM GoodsCatUnit gcu2
                    WHERE gcu2.GoodsCat_Id = gcu.GoodsCat_Id
                   ) AND
          gcu.isDisplay <> 1;

Индекс включен GoodsCatUnit(GoodsCat_Id, id).

...