Если существует до вставки, обновления, удаления для оптимизации - PullRequest
34 голосов
/ 16 февраля 2010

Нередко возникает ситуация, когда вам необходимо выполнить оператор INSERT, UPDATE или DELETE на основании какого-либо условия. И мой вопрос заключается в том, влияет ли на производительность запроса добавление IF EXISTS перед командой.

Пример

IF EXISTS(SELECT 1 FROM Contacs WHERE [Type] = 1)
    UPDATE Contacs SET [Deleted] = 1 WHERE [Type] = 1

А как насчет ВСТАВКИ или УДАЛЕНИЯ?

Ответы [ 12 ]

0 голосов
/ 22 февраля 2010
IF EXISTS....UPDATE

Не делай этого. Вызывает два сканирования / поиска вместо одного.

Если обновление не находит соответствия в предложении WHERE, стоимость оператора обновления составляет всего лишь поиск / сканирование.

Если он находит совпадение, и если вы предисловие его с IF EXISTS, он должен найти одно и то же совпадение дважды. И в параллельной среде то, что было верно для EXISTS, может больше не быть верным для ОБНОВЛЕНИЯ.

Именно поэтому операторы UPDATE / DELETE / INSERT допускают предложение WHERE. Используйте это!

0 голосов
/ 22 февраля 2010

Если вы используете MySQL, вы можете использовать insert ... для дубликата .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...