У меня большая таблица (60 столбцов, 2 миллиона строк).
Сначала создается рекурсивный запрос, а затем большинство столбцов обновляются по-своему.
Все это обновление довольно медленное (80% от глобальной продолжительности).
Порядок обновлений не может быть полностью случайным, так как некоторые столбцы служат входом для вычисления других столбцов. Но заказ в некоторой степени бесплатный.
Является ли обычной практикой замена списка UPDATE большим SELECT CASE? В настоящее время у меня есть что-то вроде этого:
UPDATE t SET col1=col2/col3 WHERE col4 IS NULL AND col5 IS NOT NULL; --UPDATE Nr1
UPDATE t SET col23=col24+col25 WHERE col26 IS NULL; --UPDATE Nr2
...
UPDATE t SET col46=col47*col48 WHERE col1 IS NULL --UPDATE Nr50
Может ли он быть заменен чем-то вроде:
CREATE TABLE t2 AS
SELECT
CASE WHEN col4 IS NULL AND col5 IS NOT NULL THEN col2/col3 ELSE col1 END AS col1,
...
CASE WHEN col26 IS NULL THEN col24+col25 ELSE col23 END AS col23,
..
FROM t;
CREATE TABLE t3 AS
SELECT
col1,
col2,...,
CASE WHEN col1 IS NULL THEN col47*col48 ELSE col46 END AS col46
FROM t2;