![]() |
![]() |
![]() |
|
Вопрос по быстродействию двух запросов | ☑ | ||
---|---|---|---|---|
0
vermouth
09.08.13
✎
14:50
|
Есть два варианта запроса, объясните почему первый работает быстрее второго. При тестировании вообще заметил, что второй работает то с приемлемым быстродействием, но с жуткой задержкой. Буду благодарен за ссылки? где можно почитать про оптимизацию.
"ВЫБРАТЬ | ВзаиморасчетыОстатки.Контрагент, | ВзаиморасчетыОстатки.ДокументРасчетов КАК ДокументРасчетов, | ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток, | ВЫБОР | КОГДА ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток < 0 | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Флаг |ИЗ | РегистрНакопления.Взаиморасчеты.Остатки(&МомВрем, Контрагент В (&Контрагенты)) КАК ВзаиморасчетыОстатки | |УПОРЯДОЧИТЬ ПО | ДокументРасчетов |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.Текст = "ВЫБРАТЬ | ВзаиморасчетыОстатки.Контрагент, | ВзаиморасчетыОстатки.ДокументРасчетов, | ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток, | ВЫБОР | КОГДА ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток < 0 | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Флаг |ИЗ | РегистрНакопления.Взаиморасчеты.Остатки(&МомВрем, Контрагент В (&Контрагенты)) КАК ВзаиморасчетыОстатки | |УПОРЯДОЧИТЬ ПО | ВзаиморасчетыОстатки.ДокументРасчетов.МоментВремени"; |
|||
1
Maxus43
09.08.13
✎
14:53
|
момент времени слишком специфичен, это 2 поля на самом деле, дата + ссылка
|
|||
2
Maxus43
09.08.13
✎
14:54
|
ну и ДокументРасчетов - составное поле, он соединяется со всеми документами, в него входящими. Через точку надо очень осторожно
|
|||
3
Fragster
модератор
09.08.13
✎
14:55
|
тут надо курить планы запросов скуля... у меня одинаково работают
|
|||
4
palpetrovich
09.08.13
✎
14:55
|
1+1 попробуй
УПОРЯДОЧИТЬ ПО | ВзаиморасчетыОстатки.Дата |
|||
5
palpetrovich
09.08.13
✎
14:55
|
*
ВзаиморасчетыОстатки.ДокументРасчетов.Дата |
|||
6
vermouth
09.08.13
✎
14:56
|
(3) Одинаково работает именно мой пример или просто схожие запросы?
|
|||
7
Fragster
модератор
09.08.13
✎
14:57
|
(6)ВЫБРАТЬ
ТоварыВПутиОстатки.ДокументОтправки КАК ДокументОтправки, ТоварыВПутиОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыВПути.Остатки КАК ТоварыВПутиОстатки УПОРЯДОЧИТЬ ПО ДокументОтправки АВТОУПОРЯДОЧИВАНИЕ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыВПутиОстатки.ДокументОтправки КАК ДокументОтправки, ТоварыВПутиОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыВПути.Остатки КАК ТоварыВПутиОстатки УПОРЯДОЧИТЬ ПО ТоварыВПутиОстатки.ДокументОтправки.МоментВремени ; |
|||
8
vermouth
09.08.13
✎
15:02
|
(7) да... думаю регистры наши идентичны по структуре... вот и смущает меня то, что результат запроса - это как-правило 1- 3 строки... а время выполнения второго запроса непредсказуемое...
|
|||
9
Xatori
09.08.13
✎
15:17
|
Надо глянуть во что превращается УПОРЯДОЧИТЬ ПО
| ВзаиморасчетыОстатки.ДокументРасчетов.МоментВремени, а то мб там такая шляпа получается что Лев Толстой позавидует. |
|||
10
Fragster
модератор
09.08.13
✎
15:32
|
покурил профайлер. запросы одинаковые
если выбирать из таблицы документов, то вот так: SELECT T1._IDRRef, T2._Date_Time, T2._IDRRef FROM _Document6863 T1 WITH(NOLOCK) LEFT OUTER JOIN _Document6863 T2 WITH(NOLOCK) ON T1._IDRRef = T2._IDRRef ORDER BY (T2._Date_Time), (T2._IDRRef) вот по регистру (основной таблице, чтобы было проще): ORDER BY (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN CASE WHEN T3._Date_Time IS NOT NULL THEN 0x04 END WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN CASE WHEN T4._Date_Time IS NOT NULL THEN 0x04 END ELSE T1.Fld4664_TYPE END), (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN T3._Date_Time WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN T4._Date_Time ELSE {ts ''1753-01-01 00:00:00''} END), (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN CASE WHEN T3._Date_Time IS NOT NULL THEN 0x00000000 END WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN CASE WHEN T4._Date_Time IS NOT NULL THEN 0x00000000 END ELSE T1.Fld4664_RTRef END), (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN CASE WHEN T3._Date_Time IS NOT NULL THEN 0x00000000000000000000000000000000 END WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN CASE WHEN T4._Date_Time IS NOT NULL THEN 0x00000000000000000000000000000000 END ELSE T1.Fld4664_RRRef END), (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN CASE WHEN T3._IDRRef IS NOT NULL THEN 0x08 END WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN CASE WHEN T4._IDRRef IS NOT NULL THEN 0x08 END ELSE T1.Fld4664_TYPE END), (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN CASE WHEN T3._IDRRef IS NOT NULL THEN 0x0000009E END WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN CASE WHEN T4._IDRRef IS NOT NULL THEN 0x000000A4 END ELSE T1.Fld4664_RTRef END), (CASE WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x0000009E THEN T3._IDRRef WHEN T1.Fld4664_TYPE = 0x08 AND T1.Fld4664_RTRef = 0x000000A4 THEN T4._IDRRef ELSE T1.Fld4664_RRRef END) а если выбирать из временной таблицы - то при автоупорядочивании сортировки НЕТ о_О (при .момент времени - есть) |
|||
11
ptiz
09.08.13
✎
15:32
|
(8) Два разных запроса. В одном - есть соединение, в другом - нет. Что непонятно?
Упорядочивание они дадут разное. Если совпадет - это случайность. |
|||
12
Fragster
модератор
09.08.13
✎
15:33
|
в общем - сортировка по моменту времени - зло...
|
|||
13
Fragster
модератор
09.08.13
✎
15:33
|
(11) соединение есть в обоих случаях
|
|||
14
ptiz
09.08.13
✎
15:35
|
(13) Да, наверное ступил. Просто стараюсь не пользоваться Автоупорядочиванием, т.к. черт знает, как оно сработает :)
|
|||
15
vermouth
09.08.13
✎
16:50
|
то есть АВТОУПОРЯДОЧИВАНИЕ это будет как СОРТИРОВАТЬ ПО Дате без анализа положения документа по оси времени??? И при наличии документов с точной датой до секунды я могу получать разные выборки? Если так - то это грустно....
|
|||
16
Fragster
модератор
09.08.13
✎
16:58
|
(15) нет, автоупорядочивание это как упорядочить по моменту времени
|
|||
17
vermouth
09.08.13
✎
17:04
|
то есть по результату запросы идентичны при любом варианте... ну а если меня беспокоит скорость - это просто вопрос конвертации с языка запросов 1С в SQL так?
|
|||
18
vermouth
09.08.13
✎
17:53
|
Спасибо всем участникам
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |