Ну, вы можете создать свои собственные «пакеты / яйца» в вашем {app-home-dir / packages} (например, справившись с яйцами) и настроить дополнительные файлы в setup.py (setuptools), чтобы упаковать все это как единое распределение ( Что такое setup.py?). Обратите внимание, что перед тем, как вы запустите основную функцию приложения, вам необходимо сообщить Python, где именно ваши внешние «пакеты / яйца», - добавив {app-home-dir / packages} в sys.path. Это облегчает создание автономного пакета. Однако с этим связаны опасения относительно зависимостей и их версий, модули Python, смешанные с кодом Ansi C и т. Д.
Я думаю, что делать все 3 обновления в одном утверждении было бы быстрее.
Вы можете сделать это, используя соединение и оператор case, см. Пример ниже
update t
set Status = case when t2.Status = '01' then '02'
when t2.Status = '08' then '05'
when t2.Status = '04' then '06'
end
from table t
inner join another table t2
on t2.id = t.id
where t2.Status in ('01', '08', '04')
Различие между выполнением UPDATE
операторов в одной или трех процедурах, вероятно, будет незначительным.
Однако, чтобы повторить комментарии, одно утверждение, вероятно, будет более производительным, чем три утверждения.
Тем не менее, гораздо важнее ограничить UPDATE
, так что только перезаписываемые значения необходимо обновлять с помощью предложения WHERE
. В противном случае очень вероятно, что для большого количества записей вы будете записывать на диск, чтобы установить значение STATUS
на то же значение, которое уже есть. Это убьет производительность.
Вы также, вероятно, получите лучшую скорость от JOIN
, чем от дополнительного выбора с IN
.
Я бы начал с того, чтобы настроить что-то подобное в вашей ситуации и посмотреть, улучшите ли вы скорость одним вызовом, а не тремя.
UPDATE tgt
SET tgt.STATUS = CASE WHEN src.STATUS IN ('01') THEN '02'
WHEN src.STATUS IN ('08') THEN '05'
WHEN src.STATUS IN ('04') THEN '06'
FROM
TABLE AS tgt
JOIN
ANOTHER_TABLE AS src
ON
src.ID = tgt.ID
AND
src.STATUS IN ('01','04','08')
WHERE
tgt.STATUS <> CASE WHEN src.STATUS IN ('01') THEN '02'
WHEN src.STATUS IN ('08') THEN '05'
WHEN src.STATUS IN ('04') THEN '06';
Редактировать : кивнуть на ответ Гвидо об ограничении количества записей, извлеченных из ANOTHER_TABLE
с предложением IN
.