Вложенный запрос или временная таблица? #504335


#0 by miron16
Подскажите пожалуйста, в каких случаях следует использовать вложенный запрос, а в каких временные таблицы?
#1 by Рэйв
я лично временные использую только когда запрос супер навороченный или скуль ругается на 255 таблиц.
#2 by simol
Я наоборот, минимум вложенных, все во временные. Единственное могу сказать, что после мыслишь по другому, как-то проще, может это и плохо.
#3 by smitru
Зависит от количества таких обращений. если "разово", то наверное удобно использовать вложенный запрос, что бы не тратить ресурсы на механизм временных таблиц - если таких обращений много - из лучше выносить во временную. но опять же - для удобства отладки и логики иногда удобнее разворачивать навороты вложенных таблиц через временные таблицы
#4 by miron16
1. Если кто знает, какая позиция 1С по этому вопросу? 2. Просто у меня возник спор с коллегой, я говорил что если выборка данных используется только один раз - то он делает вложенным запросом, если к этой выборке обращаться приходится неоднократно - то веременная таблица. Коллега же утверждал что если выборка небольшая (до 100 строк) то временная таблица будет быстрее отрабатывать.
#5 by miron16
чем я руководствовался: Дял создания временной таблицы требуется 1- создать менеджер временных таблиц 2-запросом выбрать данные в неё 3 записать во временную память результат 4 сделать основной запрос к БД + к этому обекту (временной таблице) в если делать вложенным запросом - то только один запрос к БД
#6 by miron16
тут даже вопрос не в тех сотых долях секунды =) а именно в подходе
#7 by H A D G E H O G s
Не спорь больше с другом.
#8 by miron16
Если мой подход неверен - я с радостью его пересмотрю и исправлюсь =)
#9 by smitru
Если ВТ используется одноразово, то менеджер временных таблиц - не нужен
#10 by miron16
он не нужен если запрос пакетный, в данном случае обсуждаем два запроса отдельных
#11 by пента
для временных таблиц еще могут создаваться индексы главным в использовании временных таблиц считаю исключение переборов и циклов
#12 by H A D G E H O G s
SQL настолько суров, что обходится без переборов и циклов. Даже при работе с индексом.
#13 by H A D G E H O G s
Временная таблица храниться в SQL, в базе tempdb, и, в зависимости от ситуации, может быть скинута на жесткий диск.
#14 by H A D G E H O G s
Поэтому - не все йогурты одинаково полезны. Что для себя - то юзаю ВТ пакетно тогда, когда уже отфильтрованные данные нужны несколько раз, например в параметрах фильтра виртуальных таблиц по Остаткам на складе, и резервам на складе.
#15 by miron16
H A D G E H O G s  - а если результат ВТ используешь один раз?
#16 by пента
давай я тебе помогу немножко
#17 by miron16
больше нет версий по вопросу ветки?
#18 by пента
однозначного ответа нет - все зависит от конкретного запроса и конкретной базы
#19 by miron16
пента - спасибо.
#20 by H A D G E H O G s
Гммм, там ангицкий, а я - ленив. Но спрошу - SQL создает ВТ - одним махом, или все же циклично читает источник и добавляет строки ?
#21 by H A D G E H O G s
Ну и поиск в ВТ - одним махом, или циклично по ее строкам/рекурсивно по узлам дерева поиска(для индекса)?
#22 by пента
циклы могут быть для вложенных запросов
#23 by пента
#24 by miron16
Сейчас пытаюсь найти информацию по данному вопросу на ИТС - пока безрезультатно. Хочется разобраться в этой теме максимально детально. Нет ли у вас источников, которые можно изучить кроме ИТС?
#25 by H A D G E H O G s
Несомненно. Просто ты так говоришь, что вот у меня возникло ощущение, что при исп. ВТ вообще циклов нет.
#26 by miron16
Спасибо =) наверное то, что надо
#27 by lamort
если есть доступ почитай.
#28 by cost10
Лучше вообще не пользоваться вложенными запросами - такие запросы плохо обрабатываются на стороне субд (трудно найти оптимальный индекс и скорее всего будет сделан полный перебор).
#29 by МихаилМ
Применительно к 1с8 говорить о запросах без привязки к конкретной субд бессмысленно. опять же тут вопрос удобства  разработки - поддержки что тоже важно.
#30 by IamAlexy
левая рука или правая нога? что выбрать? посоветуйте за и против.. ненужное планирую отрезать...
#31 by IamAlexy
чисто интересно: берем типический пакетный запрос.. в нем первым запросом создается виртуальная таблица а второй запро, ВНИМАНИЕ!, позапросом обращается к этой виртуальной таблице... типа что я должен выбрать?
#32 by МихаилМ
виртуальная или временная ? а за - 5
#33 by IamAlexy
виртуальная все же :)
#34 by МихаилМ
тогда - тоже шутка.
#35 by miron16
IamAlexy - очень рад, что поднял Ваше настроение. В теме нет такой мысли что надо отказаться либо от вложенных запросов либо от временных таблиц вообще. Вопрос был в том - в каких случаях надо использовать одно а в каких другое? если вам предложат поесть - то наверное Вы выберите левую руку (надеюсь), или если вам предложат померять ботинок - то скорее всего правую ногу. так и сдесь - в таких то случаях применяют временную таблицу, а в таких то - вложенный запрос. Догадки и предположения у меня у самого есть... нет конкретного алгоритма...так как нет понимания их различаев. Если у кого есть это понимания, прошу разъяснить =) Спасибо.
#36 by МихаилМ
для отладки удобней применять врем таблицы для наглядности (понятности) текста запроса - тоже если увал объединение в 20-40 таблиц такой мега джоин отлаживать очень ссложно проще разбить на части и олаживать по частям В этом случае нужно обратить внимание применительно к 1с8 какие ограничения на создание индексов ВТ существуют для оценки производительности выборки запроса принцип декомпозиции при создании ПО желательно соблюдать. про остальное я указал
#37 by miron16
lamort - спасбо за ссылку. полезно.
#38 by miron16
МихаилМ - Спасибо.
#39 by nbIx
В 8.0 я писал огроменные запросы на 300-500 строк. С помощью временных таблиц можно разбить на определенные смысловые блоки, причем я тоже задавался этим вопросом в каком случае производительность выше. Конкретно в моих случаях время выполнения запросов не отличалось даже на 10%.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С