|
Оптимизация запроса | ☑ | ||
---|---|---|---|---|
0
Hipocrisy2013
09.02.14
✎
18:24
|
В регистре сведений СвязанныеДокументы два индексированных реквизита – Документ1 и Документ2. Нижеприведенный запрос выдает верные результаты. Как его можно оптимизировать по скорости?
ВЫБРАТЬ Регистр.Документ1, Регистр.Документ2 ИЗ РегистрСведений.СвязанныеДокументы КАК Регистр ГДЕ (Регистр.Документ1 В (&СписокДокументов) ИЛИ Регистр.Документ2 В (&СписокДокументов)) |
|||
1
zulu_mix
09.02.14
✎
18:29
|
выбрать
регистр.документ1, регистр.документ2 из &СписокДокументов как списокдокументов левое соединение РегистрСведений.СвязанныеДокументы КАК Регистр по списокдокументов.ссылка = регистр.документ1 или списокдокументов.ссылка = регистр.документ2 |
|||
2
PR
09.02.14
✎
18:29
|
ВЫБРАТЬ
Регистр.Документ1, Регистр.Документ2 ИЗ РегистрСведений.СвязанныеДокументы КАК Регистр ГДЕ (Регистр.Документ1 В (&СписокДокументов) ОБЪЕДИНИТЬ ВЫБРАТЬ Регистр.Документ1, Регистр.Документ2 ИЗ РегистрСведений.СвязанныеДокументы КАК Регистр ГДЕ Регистр.Документ2 В (&СписокДокументов)) |
|||
3
Tateossian
09.02.14
✎
18:35
|
(1) А тут "ПОМЕСТИТЬ" не надо?
|
|||
4
zulu_mix
09.02.14
✎
18:38
|
(3) а да, точно.
сначала во времянку конечно же. с другой стороны если этот список получен программно, то его можно запросом собрать |
|||
5
DirecTwiX
09.02.14
✎
18:42
|
(2) Из одного запроса, требующего оптимизации, сделал два) Либо я дурак)
Но, как минимум, ОБЪЕДИНИТЬ надо заменить на ОБЪЕДИНИТЬ ВСЕ + РАЗЛИЧНЫЕ. (1) Выборка из массива всегда быстрее выборки из базы? Как вообще скорости выборки соотносятся?) Никто не проверял/не знает? |
|||
6
DirecTwiX
09.02.14
✎
18:43
|
(4) Запросом не всегда можно собрать) Точнее тем, который будет работать быстрее)
|
|||
7
Hipocrisy2013
09.02.14
✎
18:43
|
(2) ты избавился от конструкции "или", которая вроде как тормозит запрос, а конструкция "Индексировать по" тут не уместна? "индексировать по" уместна если мы будем соединять временные таблицы, а на объединение она не катит?
|
|||
8
PR
09.02.14
✎
18:46
|
(5) Вообще-то я убрал ИЛИ, что есть большое дело, 1С так рекомендует делать.
"ОБЪЕДИНИТЬ" вместо "ОБЪЕДИНИТЬ ВСЕ + РАЗЛИЧНЫЕ" правильнее, если педантично подходить к вопросу, потому что в общем виде мой результат будет идентичен результату исходного запроса, а твой нет. |
|||
9
PR
09.02.14
✎
18:47
|
(7) Про какую индексацию ты говоришь, если нет временных таблиц?
|
|||
10
PR
09.02.14
✎
18:48
|
(5) >>Выборка из массива всегда быстрее выборки из базы? Как вообще скорости выборки соотносятся?) Никто не проверял/не знает?
Главное не в том, что он выбирает из массива, а в том, что он делает ЛС к РС, а не выбирает из РС с отбором. Не уверен, впрочем, что это даст эффект, но может и даст. |
|||
11
Hipocrisy2013
09.02.14
✎
18:52
|
(9) вот так не быстрее будет я имел ввиду:
ВЫБРАТЬ Регистр.Документ1, Регистр.Документ2 Поместить Первый ИЗ РегистрСведений.СвязанныеДокументы КАК Регистр ГДЕ Регистр.Документ1 В (&СписокДокументов) индексировать по Регистр.Документ1, Регистр.Документ2 ; ВЫБРАТЬ Регистр.Документ1, Регистр.Документ2 Поместить Второй ИЗ РегистрСведений.СвязанныеДокументы КАК Регистр ГДЕ Регистр.Документ2 В (&СписокДокументов) индексировать по Регистр.Документ1, Регистр.Документ2 ; ВЫБРАТЬ Первый.Документ1, Первый.Документ2 ИЗ Первый КАК Первый ОБЪЕДИНИТЬ ВЫБРАТЬ Второй.Документ1, Второй.Документ2 ИЗ Второй КАК Второй |
|||
12
zulu_mix
09.02.14
✎
18:57
|
(11) вот так точно не будет
|
|||
13
PR
09.02.14
✎
19:25
|
(11) Это вопрос или самобичевание?
Если вопрос, то где знак вопроса? |
|||
14
Hipocrisy2013
09.02.14
✎
19:46
|
(13) вопрос был в ответе (7)
|
|||
15
PR
09.02.14
✎
19:50
|
(14) В (11) совершенно не то, нежели в (2).
Где ты у меня увидел временные таблицы? |
|||
16
echo77
09.02.14
✎
19:53
|
Мне кажется тут нечего оптимизировать
|
|||
17
PR
09.02.14
✎
19:56
|
(16) Зря
|
|||
18
Sorm
09.02.14
✎
20:06
|
(0) Через UNION - два запроса, отработают индексы на документ1 и документ2.
|
|||
19
GANR
09.02.14
✎
20:36
|
(16) Кажется? В профайлер глянь, план запроса проанализируй.
|
|||
20
viktor_vv
09.02.14
✎
22:46
|
(18) Че-то мне имхается нифига они не отработают, потому как измерения сотавного типа. Тут если в массиве заведомо документы одного типа разве что условие на тип ссылки сильно поможет.
|
|||
21
H A D G E H O G s
09.02.14
✎
22:51
|
(20) Че это?
Условие на RRef и хватит с вас. 1C не будет TRef проверять, имхо. |
|||
22
viktor_vv
09.02.14
✎
22:55
|
(21) Но если измерение составного типа (это я телепатирую) , то в индексе буде _T+TRef+RRef
|
|||
23
H A D G E H O G s
09.02.14
✎
22:56
|
(22) Да ладно.
Ну в таблице документов должен быть индекс, чтобы выбрать документ по ссылке. |
|||
24
H A D G E H O G s
09.02.14
✎
22:57
|
Аа, блин, пардон. Туплю
|
|||
25
H A D G E H O G s
09.02.14
✎
22:57
|
Перепутал.
|
|||
26
H A D G E H O G s
09.02.14
✎
23:04
|
Все норм.
Будет использоваться индекс. |
|||
27
zulu_mix
09.02.14
✎
23:09
|
(26) ну таки что, о великий Гуру, чей пирожок то?
|
|||
28
viktor_vv
09.02.14
✎
23:11
|
(26) Странно, может при массиве там как-то по другому план троится, так как при условие на одно значение без условия на тип ссылки не используется индекс.
|
|||
29
viktor_vv
09.02.14
✎
23:12
|
(28)* строится. Под скулем базы нету, посмотреть не могу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |