Тема: delete_from
Показать сообщение отдельно
Старый 03.02.2005, 19:02   #13  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Изначально опубликовано 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