Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Сломалась оптимизация..  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 269
--- условно чтобы показать проблему (на синтаксис особоо не заморачиваться)..
use DSBO - позиции в докумете есть индекс по koddok и kodtow
use DTOW - товар есть индекс по kodtow

use Shapki - шапки документа
select Shapki
browse for s_sum(kod)>0


Function s_sum
lparameter m.kod
SELECT SUM(AA.KOLVO*BB.CENA) FROM DSBO AA,DTOW BB WHERE AA.KODDOK=M.KOD AND AA.KODTOW=BB.KODTOW GROUP BY AA.KODDOK INTO ARRAY M_ARSUM
return M_ARSUM(1)
---------------------------------------

Стала работать медленней в 6 раз.
Проверил =SYS(3054,11,"ZZZ")
Не оптимизировалась по bb - почему?
26 янв 12, 05:47    [11973156]     Ответить | Цитировать Сообщить модератору
 Re: Сломалась оптимизация..  [new]
Dima T
Member

Откуда:
Сообщений: 15271
MaestroEv
Проверил =SYS(3054,11,"ZZZ")
Не оптимизировалась по bb - почему?

И чего пишет? Мы телепатически должны догадаться?
Вставить ответ в буфер обмена так:
_cliptext = zzz


Какие индексы есть в DSBO, DTOW ?
Надо индексы по DSBO.KODDOK и DTOW.KODTOW
Какого типа поля AA.KODDOK и AA.KODTOW ?
Если поля символьные и есть индексы - проверь что индексы созданы и запрос выполняется при одинаковом SET COLLATE

Так сделать запрос попробуй:
SELECT SUM(AA.KOLVO*BB.CENA);
   FROM DSBO AA join DTOW BB on AA.KODTOW=BB.KODTOW;
   WHERE AA.KODDOK=M.KOD;
   GROUP BY AA.KODDOK;
   INTO ARRAY M_ARSUM
26 янв 12, 06:57    [11973176]     Ответить | Цитировать Сообщить модератору
 Re: Сломалась оптимизация..  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 269
Все это с той же оперы.. Вернул таблицы в базу - скрость вернулась.
9 фев 12, 17:39    [12064813]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить