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

Несколько индексов в выборке

Добавлено: 05 ноя 2003, 14:55
AlexY
есть необходимость сделать выборку по одному индексу, а потом по желанию пользователя делать сортировки, но для этого надо задействовать другие индексы. Возможно ли это? если нет, посоветуйте как это обойти. примерный код привожу ниже

from
ListGood
where
(( byPodr == ListGood.CPodr and //здесь должна быть сортировка Listgood05
ListGood.cMC == KatMC.nRec and
ListGood.cOtpEd == KatOtpEd.nRec and
KatMC.cED == KatEd.nRec and
KatMC.cGroupMC == GroupMC.nRec and
byPodr == KatPodr.Nrec
))
order byArticul ListGood.Articul //здесь должна быть сортировка Listgood02
order byNameMC ListGood.NameGoods //здесь должна быть сортировка Listgood02
order byBarCode ListGood.BarCode //здесь должна быть сортировка Listgood04

еслиявно не указывать Listgood05 система индекса не находит и выгрузка происходит очень долго. если явно указать, то не работают сортировки, а задать индексы (другие) на сортировку я не могу.

Спасибо всем кто откликнется.

Re: Несколько индексов в выборке

Добавлено: 05 ноя 2003, 15:17
Goblin
проблема сто раз обсосана в Vip&ARD ...
нет индекса подходящего по сегментам для требуемой сортировки с учетом ограничений в where - не будет сортировки ...либо будет но во внешней выгрузке, что есть не фонтан быстродействия ... если опыт и квалификация позволяет(если понимаешь что от этого может быть и как от этого избавиться в случае чего без ущерба БД ) - можешь докомпилить словарь нужными индексами.

Re: Несколько индексов в выборке

Добавлено: 05 ноя 2003, 15:26
AlexY
в том-то и дело что индексы все еть, но если явно не указываю, то происходит внешняя выгрузка. если я явно указываю индекс, то все хорошо кроме того, что сортировки не работают. если первоначальный вариант

from
ListGood
where
(( byPodr == ListGood.CPodr and
ListGood.cMC == KatMC.nRec and
ListGood.cOtpEd == KatOtpEd.nRec and
KatMC.cED == KatEd.nRec and
KatMC.cGroupMC == GroupMC.nRec and
byPodr == KatPodr.Nrec
))
order byArticul ListGood.Articul
order byNameMC ListGood.NameGoods
order byBarCode ListGood.BarCode

переписать следующим образом

from
ListGood(Listgood05)
where
(( byPodr == ListGood.CPodr and
ListGood.cMC == KatMC.nRec and
ListGood.cOtpEd == KatOtpEd.nRec and
KatMC.cED == KatEd.nRec and
KatMC.cGroupMC == GroupMC.nRec and
byPodr == KatPodr.Nrec
))
order byArticul ListGood.Articul
order byNameMC ListGood.NameGoods
order byBarCode ListGood.BarCode

то все быстро работает,НО индекс Listgood05 идет по полю CPodr. т.е. не работают orderы

Re: Несколько индексов в выборке

Добавлено: 05 ноя 2003, 19:31
ecasoft
Как это у вас есть индексы...нет их у Вас..в этом и дело.

Совтавной индекс нужен такой, к примеру, для сортировки по имени и выбрке по подразделению:

NameGoods + cPodr в таблице ListGood..там такого нет.

Значит придется делать так только:

root == ListGood.Namegoods and
( byPodr = ListGood.cPodr) and
......

но работать будет медленно

Re: Несколько индексов в выборке

Добавлено: 10 ноя 2003, 07:55
Maverick
А можно сделать и покрасивее и элегантнее )))

byList == ListGood.Namegoods (noindex) and
byPodr == ListGood.cPodr and
...


А вообще - АДМИН !! ПЕРЕНИЕСИ ЭТУ ВЕТКУ В ВИП ИЛИ УДАЛИ ЕЕ!!!
ХАРОШ ОФФТОПИТЬ !!!