Сортировки & индексы
Добавлено: 30 окт 2003, 11:37
Вот есть у меня вопрос.
Почему запрос
.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 секунд!
Может, я что-то делаю не так? Может, есть ЕЩЕ какая-либо тонкость в использовании индексов?
Почему запрос
.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 секунд!
Может, я что-то делаю не так? Может, есть ЕЩЕ какая-либо тонкость в использовании индексов?