Страница 1 из 1
Вопрос по exists ... :)
Добавлено: 12 май 2009, 16:54
Antoxa
Как можно оптимизировать следующий запрос?
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
Дело в том, что в Table1 много записей и запрос выполняется очень долго, но нужна выборка только за одну дату, а как это указать???
Re: Вопрос по exists ... :)
Добавлено: 12 май 2009, 17:11
Antoxa
В чистом виде:
Код: Выделить всё
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
он работает быстро,
но так:
Код: Выделить всё
select Table1.*, Table2.*, Table3.*
from disp
inner join spr_driver on (disp.id_d= Table2.id_d)
inner join sprauto on (disp.id_a = Table3.id_a)
WHERE (disp.DATE_GO=:DG) and (not exists (select * from Table4 where Table4.ID = Table1.ID))
работает очень медленно,
хотя, так:
Код: Выделить всё
select Table1.*, Table2.*, Table3.*
from disp
inner join spr_driver on (disp.id_d= Table2.id_d)
inner join sprauto on (disp.id_a = Table3.id_a)
WHERE (disp.DATE_GO=:DG)
работает быстро...
Видимо придется использовать
Код: Выделить всё
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
, а вместо inner join просто воспользоваться lookup полями...
Re: Вопрос по exists ... :)
Добавлено: 12 май 2009, 17:25
Antoxa
Даже в чистом виде:
Код: Выделить всё
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
Ч-з IBX выполняется около 2 сек, в таблице Table1 200 записей, в Table2 19000 записей.
В диапазоне Table1.DateDoc=:D только 70 записей, как же получить обработку в Exists только этих 70 записей, чтобы не перебирались все 19000 записей???
Re: Вопрос по exists ... :)
Добавлено: 12 май 2009, 17:34
Antoxa
Вопрос закрыт...
Просто параметр был равен null...
после задания значения параметра в 12.04.2009 все заработало быстро в любых вариантах!!!
Re: Вопрос по exists ... :)
Добавлено: 13 май 2009, 07:31
Tonal
Antoxa писал(а):
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
А ничё, что выделенное выражение всегда истина?
Или это ошибка при вставке кода сюда?
Re: Вопрос по exists ... :)
Добавлено: 13 май 2009, 11:12
WildSery
Антоха, учись читать планы. Или по крайней мере копи-пастить сюда.
Монологи о том, как тяжело работают запросы на каком-то неизвестном сервере с неизвестными планами и индексами утомляют.
Re: Вопрос по exists ... :)
Добавлено: 14 май 2009, 18:19
Antoxa
WildSery писал(а):Монологи о том, как тяжело работают запросы на каком-то неизвестном сервере с неизвестными планами и индексами утомляют.
Ок.
Просто никогда не пользовался exists и ОЧЕНЬ обрадовался, когда всё заработало!!!
