Вопрос по exists ... :)
Вопрос по exists ... :)
Как можно оптимизировать следующий запрос?
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
Дело в том, что в Table1 много записей и запрос выполняется очень долго, но нужна выборка только за одну дату, а как это указать???
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
Дело в том, что в Table1 много записей и запрос выполняется очень долго, но нужна выборка только за одну дату, а как это указать???
Re: Вопрос по exists ... :)
В чистом виде:
он работает быстро,
но так:
работает очень медленно,
хотя, так:
работает быстро...
Видимо придется использовать
, а вместо inner join просто воспользоваться lookup полями...
Код: Выделить всё
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))
Re: Вопрос по exists ... :)
Даже в чистом виде:
Ч-з IBX выполняется около 2 сек, в таблице Table1 200 записей, в Table2 19000 записей.
В диапазоне Table1.DateDoc=:D только 70 записей, как же получить обработку в Exists только этих 70 записей, чтобы не перебирались все 19000 записей???
Код: Выделить всё
select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
В диапазоне Table1.DateDoc=:D только 70 записей, как же получить обработку в Exists только этих 70 записей, чтобы не перебирались все 19000 записей???
Re: Вопрос по exists ... :)
Вопрос закрыт...
Просто параметр был равен null...
после задания значения параметра в 12.04.2009 все заработало быстро в любых вариантах!!!
Просто параметр был равен null...
после задания значения параметра в 12.04.2009 все заработало быстро в любых вариантах!!!
Re: Вопрос по exists ... :)
А ничё, что выделенное выражение всегда истина?Antoxa писал(а): select Table1
WHERE (DateDoc=:D) and (not exists (select * from Table2 where Table1.ID = Table1.ID))
Или это ошибка при вставке кода сюда?
Re: Вопрос по exists ... :)
Антоха, учись читать планы. Или по крайней мере копи-пастить сюда.
Монологи о том, как тяжело работают запросы на каком-то неизвестном сервере с неизвестными планами и индексами утомляют.
Монологи о том, как тяжело работают запросы на каком-то неизвестном сервере с неизвестными планами и индексами утомляют.
Re: Вопрос по exists ... :)
Ок.WildSery писал(а):Монологи о том, как тяжело работают запросы на каком-то неизвестном сервере с неизвестными планами и индексами утомляют.
Просто никогда не пользовался exists и ОЧЕНЬ обрадовался, когда всё заработало!!!