Цитата:
Изначально опубликовано Nikolaich
exists join существенно медленнее inner, посмотрите на трассировку запросов
- там на сервер посылается подзапрос where exists (то есть тот же select).
В трассировку смотрел. Насчет "существенно" несогласен
Я тут примерчик набросал. Посмотрите плана исполнения. Убедитесь, что наличие WHERE EXISTS() в запросе совсем не означает обязательного его (подзапроса) исполнения для каждой удаляемой строки. Люди, которые сиквелу оптимизатор пишут, тоже незря хлеб едят
PHP код:
set showplan_all on
go
begin tran
delete trans
from bmssa.LedgerTrans trans
inner join bmssa.LedgerTable ledger on ledger.AccountNum = trans.AccountNum
where ledger.dataareaid = 'dmo' and trans.DataAreaId = 'dmo' and ledger.AccountNum = ' 01.000'
rollback
go
begin tran
delete trans
from bmssa.LedgerTrans trans
where trans.DataAreaId = 'dmo' and exists
(select *
from bmssa.LedgerTable ledger
where
ledger.DataAreaid = 'dmo' and
ledger.AccountNum = trans.AccountNum and
ledger.AccountNum = ' 01.000')
rollback tran
go