Прежде всего, SELECT, за которым следует UPDATE, почти всегда является недопустимым при параллелизме. Если ничего не выполняется при уровне изоляции SERIALIZABLE, нет гарантии, что строки не меняют между SELECT и UPDATE.
Во-вторых, для случаев, когда являются строк для обновления, стоимость SELECT + UPDATE по определению выше, чем просто ОБНОВЛЕНИЕ.
И последнее, для случая, когда не являются строк, чтобы обновить стоимость их размещения с помощью UPDATE, часто совпадают с затратами на их поиск по SELECT, поэтому вы ничего не выиграли. Я говорю «часто», а не «всегда», потому что оптимизатор запросов может рассматривать разные стратегии обновления и выбора, а проверка обновлений происходит в соответствии с разными правилами блокировки (параллелизма), чем сканирование для чтения.
Что может иметь смысл - иметь очень дешевый SELECT, который может избежать дорогого ОБНОВЛЕНИЯ, даже если он не на 100% точнее. Условия между SELECT и UPDATE могут сильно различаться. Пока вы не получаете никаких ложных негативов (SELECT говорит, что не должно быть никаких строк, но UPDATE бы нашел строку, если бы она была запущена) и количество ложных (SELECT говорит, что есть строки, но более точная/дорогая проверка UPDATE на самом деле не находит).
В конечном счете это проблема оптимизации, и все вопросы по оптимизации начинаются с , измеряя. Сначала найдите дорогой UPDATE, а затем начните изменять.
Это зависит от того, насколько сложна ваша фраза 'WHERE'. Оператор 'UPDATE' должен сначала выяснить, какие строки обновить, или нет. Это может включать сканирование таблицы, если вам не хватает правильных индексов на этой таблице. Как всегда: ** проверить ** и посмотреть, насколько это плохо. Конечно, было бы лучше определить только те строки, которые действительно нуждаются в обновлении, а затем обновить только те. Но сколько усилий нужно для определения этих строк? –
Усилия будут включать беспорядок с табличными переменными, а не только один или два ... Я говорю о 20 операциях обновления, выполняющихся вместе в скрипте и обновляющих разные таблицы. С точки зрения усилий по развитию было бы гораздо больше, чем просто разрабатывать заявления об обновлении. Что касается предложений where в обновлении, то большинство из них имеют одно или два внутренних соединения в большинстве и простых «равно null» или «<> 0», где клаузулы. –