|
v7: Прямой запрос DBF и индексы | ☑ | ||
|---|---|---|---|---|
|
0
sendems
26.10.12
✎
18:33
|
Привет, товарищи.
Есть такой прямой запрос, который прекрасно работал: |SELECT | Рег.DATE AS ДатаДень, | SUM(-1*$Рег.Прибыль*(1-Рег.DEBKRED*2)) AS ПрибыльТовара |FROM | $Регистр.ПартииТоваров AS Рег |WHERE | ($Рег.Товар+DTOS(Рег.DATE)+Рег.TIME+Рег.IDDOC+STR(Рег.LINENO,4)+STR(Рег.ACTNO,6) BETWEEN | :выбТовар+DTOS(:Дата1~~)+' '+' '+'0000'+'000000' AND | :выбТовар+DTOS(:Дата2~~)+'ZZZZZZ'+'ZZZZZZZZZ'+'9999'+'999999') AND | (Рег.IDDOCDEF NOT IN ($ВидДокумента.Перемещение,$ВидДокумента.Списание)) AND | ($Рег.Статус IN (:СП1,:СП2,:СП3,:СП4,:СП5)) AND | ($Рег.Фирма = :выбФирма) |GROUP BY | Рег.DATE |"; Потом мне захотелось выбрать все движения в регистре по всем товарам за тот же период, переписал условие BETWEEN так: | ($Рег.Товар+DTOS(Рег.DATE)+Рег.TIME+Рег.IDDOC+STR(Рег.LINENO,4)+STR(Рег.ACTNO,6) BETWEEN | ' '+DTOS(:Дата1~~)+' '+' '+'0000'+'000000' AND | 'ZZZZZZZZ'+DTOS(:Дата2~~)+'ZZZZZZ'+'ZZZZZZZZZ'+'9999'+'999999') т.е. просто заменил конкретный товар на строки в 9 знаков длиной, как описано в .DD Так вот по-новому, запрос не фильтрует по датам и вываливает все движения за все время. Может индекс так не умеет работать? Или я еще чего не знаю, просветите. |
|||
|
1
Mikeware
26.10.12
✎
18:37
|
какой-то у тебя странный подход. и индекс, похоже, тоже странный...
|
|||
|
2
orefkov
26.10.12
✎
21:07
|
Для отбора по всем товарам этот индекс не подойдет.
А то что ты сделал, показывает твое полное непонимание работы индексов. |
|||
|
3
КонецЦикла
26.10.12
✎
21:07
|
Используй индекс DATETIME, а не VIAХХХ
Сам сравни строки ''+Дата и 'ZZZ'+Дата Понятно что дата значения вовсе тут не имеет |
|||
|
4
orefkov
26.10.12
✎
21:52
|
А 1sqlite сам бы индекс подобрал, какой надо. И без этих трехэтажных выражений в условиях.
|
|||
|
5
Злопчинский
26.10.12
✎
22:45
|
(4) на дбфной версии - есть какой-то резон использовать VFP или достаточно SQlite...?
|
|||
|
6
orefkov
26.10.12
✎
23:45
|
1sqlite проигрывает фоксу по времени при больших агрегациях (sum ... group by...), но при этом жрет гораздо меньше памяти.
|
| Форум | Правила | Описание | Секции | Поиск |