![]() |
![]() |
![]() |
|
Вложенный запрос или временная таблица? | ☑ | ||
---|---|---|---|---|
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%. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |