Страница 1 из 1

Сортировки & индексы

Добавлено: 30 окт 2003, 11:37
St.Anislav
Вот есть у меня вопрос.
Почему запрос
.create view a as select * from spsopr, katmc
where((word(201)==spsopr.vidsopr and
spsopr.cmcusl==katmc.nrec and
d0<<=spsopr.doprttn and
d1>>=spsopr.doprttn)) and
spsopr.prmc=1;
работает (причем быстро, т.е. использует индексы),
а запрос
.create view a as select * from spsopr, katmc
where((1==spsopr.prmc and
spsopr.cmcusl==katmc.nrec and
d0<<=spsopr.doprttn and
d1>>=spsopr.doprttn)) and
spsopr.vidsopr=201;
ругается, хочет ключ PRMC+DOPRTTN+DOPRTTN для SPSOPR?

Первый запрос, судя по всему, использует индекс SPSOPR04 (VIDSOPR+CMCUSL+DOPRTTN).
Второй, ПО ИДЕЕ, должен использовать индекс
SPSOPR15 (PRMC+CMCUSL+DOPRTTN), но почему-то этого не делает.
Можно, конечно, по датам без индекса фильтровать... Да только отчет работает 15 минут вместо 10 секунд!
Может, я что-то делаю не так? Может, есть ЕЩЕ какая-либо тонкость в использовании индексов?

Re: Сортировки & индексы

Добавлено: 30 окт 2003, 12:03
Max_Fin
Потому что действительно используешь индекс PRMC+DOPRTTN+DOPRTTN, которого нет!
SpSopr.cMCUsl справа не участвует в логической связи

Re: Сортировки & индексы

Добавлено: 30 окт 2003, 12:17
Den
В первом случае ипользуется индекс SPSOPR07.
Сегмент cmcusl у тебя пропущен в обоих случаях (SPSOPR04&SPSOPR15) .
Беги с katsopr-a. Тогда быстро получишь, то что нужно...