Имя: Пароль:
1C
 
Как правильнее наложить отбор при наличии временной таблицы
0 Web00001
 
05.07.24
06:23
Всем привет! Дано ВТ с набором ссылок и несколько запросов которые получают данные так или иначе связанные с этим набором ссылок. Каким образом правильнее накладывать отборы?
1. Условие типа
МояТаблица.Ссылка В (Выбор Док.Ссылка из ВТ КАК Док)

2. Внутренним соединением таблицы с ВТ?
Или одинаковая стоимость? ВТ относительно большая, в районе сотни тысяч ссылок. Результаты запросов использующих эту ВТ такие же или меньше.
1 youalex
 
05.07.24
06:41
1. я за join (если в ВТ нет дублирующихся)
2. Оптимизатор все равно сделает по своему
3. Но нужно ему помочь
2 breezee
 
05.07.24
06:55
(1) Все правильно написал
Я тоже за джоин. По идее сначала идет джоин, а потом условия, так, что, наверное оптимальнее джоин. Можете план запроса собрать, потом поделиться со всеми
3 ILM
 
05.07.24
08:35
(0) Второй способ предпочитаю, но лучше всю картину видеть.
Вполне может быть, что-то ещё лучше позволит сделать фильтр. Например, запрос по данным, а потом уже ссылки присоединять из ВТ.
Например в городе 450 тыс. л/с, а наборов проживающих+льготников+процент льготы + тариф - около 300. Лучше рассчитать 300 и потом разнести на 450 тыс. Чем считать сразу всех.
4 toypaul
 
05.07.24
12:17
Я вот не понимаю таких "оптимизаций". Если join, то логично, что тебе нужно будет брать данные из связанной таблицы. И логично, что оптимизатор будет также думать.

Если IN, то логично, что нужно только проверить на условие вхождения. Мало ли как сегодня оптимизатор работает - завтра он может по другому работать. Может его завтра научать делать проверку условия по какому-то супер-пупер алгоритму.

По идее нужно сравнить 2 варианта на ваших "условиях" и если есть значительная разница, только тогда выбирать "нелогичный" вариант.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан