Имя: Пароль:
1C
 
Вложенный запрос или временная таблица?
0 miron16
 
11.09.10
22:54
Подскажите пожалуйста, в каких случаях следует использовать вложенный запрос, а в каких временные таблицы?
1 Рэйв
 
11.09.10
22:59
(0)я лично временные использую только когда запрос супер навороченный или скуль ругается на 255 таблиц.
2 simol
 
11.09.10
23:02
(1)Я наоборот, минимум вложенных, все во временные.
Единственное могу сказать, что после мыслишь по другому, как-то проще, может это и плохо.
3 smitru
 
11.09.10
23:05
(0) Зависит от количества таких обращений. если "разово", то наверное удобно использовать вложенный запрос, что бы не тратить ресурсы на механизм временных таблиц - если таких обращений много - из лучше выносить во временную.

но опять же - для удобства отладки и логики иногда удобнее разворачивать навороты вложенных таблиц через временные таблицы
4 miron16
 
11.09.10
23:08
1. Если кто знает, какая позиция 1С по этому вопросу?
2. Просто у меня возник спор с коллегой, я говорил что если выборка данных используется только один раз - то он делает вложенным запросом, если к этой выборке обращаться приходится неоднократно - то веременная таблица.
Коллега же утверждал что если выборка небольшая (до 100 строк) то временная таблица будет быстрее отрабатывать.
5 miron16
 
11.09.10
23:10
чем я руководствовался:
Дял создания временной таблицы требуется
1- создать менеджер временных таблиц
2-запросом выбрать данные в неё
3 записать во временную память результат
4 сделать основной запрос к БД + к этому обекту (временной таблице)

в если делать вложенным запросом - то только один запрос к БД
6 miron16
 
11.09.10
23:11
тут даже вопрос не в тех сотых долях секунды =) а именно в подходе
7 H A D G E H O G s
 
11.09.10
23:11
(5) Не спорь больше с другом.
8 miron16
 
11.09.10
23:13
Если мой подход неверен - я с радостью его пересмотрю и исправлюсь =)
9 smitru
 
11.09.10
23:13
(5) Если ВТ используется одноразово, то менеджер временных таблиц - не нужен
10 miron16
 
11.09.10
23:14
он не нужен если запрос пакетный,
в данном случае обсуждаем два запроса отдельных
11 пента
 
11.09.10
23:14
для временных таблиц еще могут создаваться индексы
главным в использовании временных таблиц считаю исключение переборов и циклов
12 H A D G E H O G s
 
11.09.10
23:16
(11) SQL настолько суров, что обходится без переборов и циклов. Даже при работе с индексом.
13 H A D G E H O G s
 
11.09.10
23:17
(8) Временная таблица храниться в SQL, в базе tempdb, и, в зависимости от ситуации, может быть скинута на жесткий диск.
14 H A D G E H O G s
 
11.09.10
23:18
Поэтому - не все йогурты одинаково полезны.

Что для себя - то юзаю ВТ пакетно тогда, когда уже отфильтрованные данные нужны несколько раз, например в параметрах фильтра виртуальных таблиц по Остаткам на складе, и резервам на складе.
15 miron16
 
11.09.10
23:19
H A D G E H O G s  - а если результат ВТ используешь один раз?
16 пента
 
11.09.10
23:24
(12) давай я тебе помогу немножко http://tinyurl.com/3ybagmf
17 miron16
 
11.09.10
23:28
больше нет версий по вопросу ветки?
18 пента
 
11.09.10
23:32
(17) однозначного ответа нет - все зависит от конкретного запроса и конкретной базы
19 miron16
 
11.09.10
23:35
пента - спасибо.
20 H A D G E H O G s
 
11.09.10
23:35
(16) Гммм, там ангицкий, а я - ленив.
Но спрошу - SQL создает ВТ - одним махом, или все же циклично читает источник и добавляет строки ?
21 H A D G E H O G s
 
11.09.10
23:37
(20) Ну и поиск в ВТ - одним махом, или циклично по ее строкам/рекурсивно по узлам дерева поиска(для индекса)?
22 пента
 
11.09.10
23:38
(20) циклы могут быть для вложенных запросов
23 пента
 
11.09.10
23:40
24 miron16
 
11.09.10
23:40
Сейчас пытаюсь найти информацию по данному вопросу на ИТС - пока безрезультатно. Хочется разобраться в этой теме максимально детально. Нет ли у вас источников, которые можно изучить кроме ИТС?
25 H A D G E H O G s
 
11.09.10
23:41
(22) Несомненно. Просто ты так говоришь, что вот у меня возникло ощущение, что при исп. ВТ вообще циклов нет.
26 miron16
 
11.09.10
23:41
Спасибо =) наверное то, что надо
27 lamort
 
12.09.10
02:45
(0) http://kb.1c.ru/articleView.jsp?id=44 если есть доступ почитай.
28 cost10
 
12.09.10
02:50
Лучше вообще не пользоваться вложенными запросами - такие запросы плохо обрабатываются на стороне субд (трудно найти оптимальный индекс и скорее всего будет сделан полный перебор).
29 МихаилМ
 
12.09.10
12:37
Применительно к 1с8 говорить о запросах без привязки к конкретной субд
бессмысленно.

опять же тут вопрос удобства  разработки - поддержки
что тоже важно.
30 IamAlexy
 
12.09.10
12:46
левая рука или правая нога?

что выбрать?
посоветуйте за и против..
ненужное планирую отрезать...
31 IamAlexy
 
12.09.10
12:47
чисто интересно:

берем типический пакетный запрос.. в нем первым запросом создается виртуальная таблица а второй запро, ВНИМАНИЕ!, позапросом обращается к этой виртуальной таблице...

типа что я должен выбрать?
32 МихаилМ
 
12.09.10
12:49
(31)
виртуальная или временная ?
а за (30) - 5
33 IamAlexy
 
12.09.10
12:52
виртуальная все же :)
34 МихаилМ
 
12.09.10
12:53
(33)
тогда (31) - тоже шутка.
35 miron16
 
12.09.10
15:06
IamAlexy - очень рад, что поднял Ваше настроение.
В теме нет такой мысли что надо отказаться либо от вложенных запросов либо от временных таблиц вообще.
Вопрос был в том - в каких случаях надо использовать одно а в каких другое?
если вам предложат поесть - то наверное Вы выберите левую руку (надеюсь), или если вам предложат померять ботинок - то скорее всего правую ногу.
так и сдесь - в таких то случаях применяют временную таблицу, а в таких то - вложенный запрос.
Догадки и предположения у меня у самого есть... нет конкретного алгоритма...так как нет понимания их различаев.
Если у кого есть это понимания, прошу разъяснить =)
Спасибо.
36 МихаилМ
 
12.09.10
15:27
(35)

для отладки удобней применять врем таблицы
для наглядности (понятности) текста запроса - тоже

если увал объединение в 20-40 таблиц
такой мега джоин отлаживать очень ссложно
проще разбить на части и олаживать по частям

В этом случае нужно обратить внимание
применительно к 1с8

какие ограничения на создание индексов ВТ существуют
для оценки производительности выборки запроса

принцип декомпозиции при создании ПО желательно соблюдать.


про остальное я указал (29)
37 miron16
 
12.09.10
15:28
lamort - спасбо за ссылку. полезно.
38 miron16
 
12.09.10
15:30
МихаилМ - Спасибо.
39 nbIx
 
12.09.10
15:40
В 8.0 я писал огроменные запросы на 300-500 строк.
С помощью временных таблиц можно разбить на определенные смысловые блоки, причем я тоже задавался этим вопросом в каком случае производительность выше.

Конкретно в моих случаях время выполнения запросов не отличалось даже на 10%.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс