Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 05:25

Запрос, как на ваше мнение лучше и почему?

Автор Rasty, 14 дек 2017, 12:29

0 Пользователей и 1 гость просматривают эту тему.

Rasty

Вариант:1

ВЫБРАТЬ
Партнеры.Ссылка КАК Партнер
ПОМЕСТИТЬ ВТПартнеры
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.ОсновнойМенеджер = &ОсновнойМенеджер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК ДокументРеализации
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Партнер В
(ВЫБРАТЬ
ВТПартнеры.Партнер
ИЗ
ВТПартнеры КАК ВТПартнеры)
И РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода

Вариант:2

ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК ДокументРеализации
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Партнер В
(ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.ОсновнойМенеджер = &ОсновнойМенеджер)
И РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода

на примере простейшего запроса, я считаю вариант 1 лучше, если работать с 10млн записей и больше и читать удобнейю
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

temrmal

Если не ошибаюсь, то во 2 варианте запрос по партнерам будет происходить по каждой реализации заново.

В 1 варианте список будет гораздо меньше, а может и такой же, если все партнеры к одному менеджеру привязаны.

alex0402

1-й вариант будет стабильнее (по производительности). С использованием временных таблиц построителю легче построить план запросов. Только вместо условия с выборкой я бы использовал внутреннее соединение, результат тот же, но на мой взляд читабельнее.
Спасибо за Сказать спасибо

ilyay

Создание временной таблицы требует дополнительных расходов. Весь вопрос в том, сколько записей будет в выборке первого/вложенного запроса. Если много, надо первым способом и добавлять индексирование ссылки. Если мало (5 шт., например), то лучше второй вариант.

С учетом того, что нет индексирования, я однозначно за второй вариант, т.к. в первом вы исполняете на один запрос больше и еще создаете временную таблицу.

ЦитироватьЕсли не ошибаюсь, то во 2 варианте запрос по партнерам будет происходить по каждой реализации заново.
Сначала будет выполнен вложенный запрос, а по его результатам будет накладываться фильтр на записи другой таблицы. В смысле логики исполнения оба варианта одинаковы.

А вообще, оба варианта плохие, потому что надо в этом случае использовать внутреннее соединение, а не операцию В секции ГДЕ.

Добавлено: 18 дек 2017, 11:16


Цитироватьвы исполняете на один запрос больше
Я имею ввиду, что первым запросом вы выбрали партнеров, а потом еще раз их выбираете.

LexaK

1. вариант если Партнер у вас одного Типа

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК ДокументРеализации
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
//отбор по дате вынесен на первое место, т.к. по Дате есть какая-то индексация
    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
и   РеализацияТоваровУслуг.Партнер.ОсновнойМенеджер = &ОсновнойМенеджер


2.вариант если у вас Партнер многотипный (мутабельный)

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК ДокументРеализации
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
левое соединение
    Справочник.Партнеры КАК СпрПартнеры
    по РеализацияТоваровУслуг.Партнер  = СпрПартнеры.Ссылка
ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
и   СпрПартнеры.ОсновнойМенеджер = &ОсновнойМенеджер

если помогло нажмите: Спасибо!

ilyay

Цитировать//отбор по дате вынесен на первое место, т.к. по Дате есть какая-то индексация
Для СУБД порядок условий в запросе ничего не значит. Она может вообще условия переделать. Например, выяснит, что в все записи в этом диапазоне и выкинет условие.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск