|
Как быстрее получать остатки в запросе на текущую дату? | ☑ | ||
---|---|---|---|---|
0
alex-pro
21.10.11
✎
15:32
|
Так Остатки(,Отбор)
Или так Остатки(МоментВремени(ТекущаяДата()), Отбор) ? В общем, с указание параметра или без него? |
|||
1
alex-pro
21.10.11
✎
15:33
|
База SQL, конечно.
|
|||
2
mikecool
21.10.11
✎
15:34
|
пофик, читай описание
|
|||
3
Ненавижу 1С
гуру
21.10.11
✎
15:36
|
(0) вообще говоря первый вариант в общем случае не на текущую
|
|||
4
alex-pro
21.10.11
✎
15:38
|
(3)
Это понятно)). Предположим последняя запись регистра - чуть раньше тек даты ) (2) А если на реальной базе отличия в разы? Это что может означать? |
|||
5
Ненавижу 1С
гуру
21.10.11
✎
15:39
|
(4) ИМХО первый не медленнее второго
|
|||
6
Renat11111
21.10.11
✎
15:40
|
(0) первый интуитивно должен быть быстрее, так как сразу с таблицы итогов вроде берет на 3999 или какой там год
|
|||
7
ptiz
21.10.11
✎
15:41
|
Запросы разные.
Примеры: В 1 случае: exec sp_executesql N'SELECT #V8TblAli1_Q_000_T_001._Fld10Balance AS f_1 FROM ( SELECT CAST(SUM(_AccumRegTotals11._Fld10) AS NUMERIC(22,0)) AS _Fld10Balance FROM _AccumRegTotals11 WITH(NOLOCK) WHERE _AccumRegTotals11._Period = P1 ) #V8TblAli1_Q_000_T_001',N'P1 datetime',''3999-11-01 00:00:00:000'' во втором добавляется анализ таблицы движений: exec sp_executesql N'SELECT #V8TblAli1_Q_000_T_001._Fld10Balance AS f_1 FROM ( SELECT CAST(SUM(#V8TblAli1_T._Fld10Balance) AS NUMERIC(29,0)) AS _Fld10Balance FROM ( SELECT CAST(SUM(_AccumRegTotals11._Fld10) AS NUMERIC(22,0)) AS _Fld10Balance FROM _AccumRegTotals11 WITH(NOLOCK) WHERE _AccumRegTotals11._Period = P1 UNION ALL SELECT CAST(CAST(SUM(CASE WHEN _AccumReg8._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8._Fld10 ELSE _AccumReg8._Fld10 END) AS NUMERIC(16,0)) AS NUMERIC(23,0)) AS _Fld10Balance FROM _AccumReg8 WITH(NOLOCK) WHERE _AccumReg8._Period >= @P2 AND _AccumReg8._Period < P1 AND _AccumReg8._Active = @P3 ) #V8TblAli1_T ) #V8TblAli1_Q_000_T_001', N'P1 datetime,@P2 datetime,@P3 varbinary(1)', {ts '3999-11-01 00:00:00'}, {ts '2011-10-22 00:00:00'}, 0x01 |
|||
8
Renat11111
21.10.11
✎
15:41
|
второй способ вроде берет последний рассчитанный месяц и досчитывает по дням
|
|||
9
John83
21.10.11
✎
15:42
|
тогда уж
ВЫБРАТЬ НДСНачисленныйОстатки.СчетФактура, НДСНачисленныйОстатки.НДСОстаток ИЗ РегистрНакопления.НДСНачисленный.Остатки(, Организация = &Организация) КАК НДСНачисленныйОстатки и ВЫБРАТЬ НДСНачисленныйОстатки.СчетФактура, НДСНачисленныйОстатки.НДСОстаток ИЗ РегистрНакопления.НДСНачисленный.Остатки(, ) КАК НДСНачисленныйОстатки ГДЕ НДСНачисленныйОстатки.Организация = &Организация что будет быстрее? |
|||
10
Renat11111
21.10.11
✎
15:45
|
(9) не у него интересней вопрос был, у тебя совсем не интересно )))
|
|||
11
Рэйв
21.10.11
✎
15:48
|
(0)Без параметра возмется уже расчитанный остаток на 31.12.3999
С параметром будет расчет. второй способ быстрее должен быть |
|||
12
alex-pro
21.10.11
✎
15:48
|
(10) я вначале вообще прикола не понял.
Может, (9) это к (7) ??? |
|||
13
alex-pro
21.10.11
✎
15:49
|
Еще нюанс:
бывает так что запрос постоянно долбится в базу, часто выполняется и на 5 - 10 раз выполняется в 100 раз медленнее... предполагал что в сикле из за разных дат в кэше насобиралась куча подобных щапросов и в итоге выбирается не оптимальный план, а когда без даты то кэш не растет, т.к. запрос не модифицируется |
|||
14
Renat11111
21.10.11
✎
15:52
|
(11) перечитай написанное не вводи людей в заблужденин
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |