Лучше ли делать выборочный подсчет, чем перед удалением или слепым вызовом удаления? - PullRequest
2 голосов
/ 20 июля 2010

Я ищу лучшую практику / мысли о том, лучше ли делать подсчет выбора и проверять, равен ли результат> 0 перед вызовом удаления, или было бы лучше просто слепо запустить оператор удаления вбаза данных, даже если данные не существуют.В нашем случае большую часть времени данные НЕ будут существовать.

Так что же лучше:

Option 1: call Select Count(X) where foo, if result > 0, delete where foo

или

Option 2: delete where foo

Я склоняюсь к удалению вслепую по соображениям скорости и, так как вы все равно наносите удар по столу.

РЕДАКТИРОВАТЬ: Это на самом деле происходит в чайнике (инструмент ETL), поэтому три операции будут выполняться полностью раздельно, если есть удаление.Так что полностью в SQL это не вариант.

Ответы [ 4 ]

4 голосов
/ 20 июля 2010

Я бы просто удалил, если вы попытаетесь удалить то, чего там нет, он просто удалит 0 (ноль) строк. Это также уменьшает количество поездок в БД.

4 голосов
/ 20 июля 2010

Я бы сказал, что удалю вслепую, а затем вернусь к числу затронутых строк. В любом случае сравнение выполнено, оно должно быть практически одинаковым по времени выполнения.

2 голосов
/ 20 июля 2010

Просто зайдите на удаление. Нет никакого преимущества в выдаче количества (*) заранее.

0 голосов
/ 20 июля 2010

Универсальному ИТ-ответу предшествует «Это зависит»

Здесь это зависит от плана запроса на удаление.

Если вы выполняете запрос EXISTS (для OMG-Ponies), которыйиспользует индекс или лучший план запроса, который был бы лучше-быстрее.

Тогда можно было бы избежать ненужного удаления, использующего сканирование таблицы.

...