Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Временная таблица vs IN  [new]
Archmk
Member

Откуда:
Сообщений: 10
Есть некоторое количество id-шек.
Нужно по ним составить where-условие.
Если пользоваться временной таблицей, то заполнять ее придется отдельным обращением к БД.

Можно просто написать where id in (тут список), то на большом количестве id этот способ зафейлится (насколько мне известно, через in можно передать ограниченное количество id).

Снижает ли in скорость выполнения запроса?
Если да, то где золотая середина (tmp: лишнее время на отдельный запрос; in: возможные тормоза при большом кол-ве id)?
3 фев 11, 12:32    [10176787]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Archmk,

select *
from dual 
where (1, dummy) in ((1, 'X'), (1, 'Y'))
Это обход ограничения, но злоупотреблять не стоит.
3 фев 11, 12:35    [10176806]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Archmk,

есть ещё коллекции (типа, серединка между двумя крайностями, которые вы исследуете)

а ответ (как всегда часто ) - итдепенд-с.
т.таблица на ресурсоемких запросах, в которых страшно слететь с хорошего плана - стабильнее (надежнее). ежели, например, запрос на одном фулскане - in не хуже будет.
3 фев 11, 12:43    [10176871]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
Archmk
Member

Откуда:
Сообщений: 10
Спасибо, товарищи.
3 фев 11, 12:45    [10176898]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Archmk,

вот еще stff
3 фев 11, 12:46    [10176906]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Archmk
Если да, то где золотая середина
Золотая середина - читать про то как работает CBO и понять что золотой середины нет. В твоем случае, если прям так дохрена элементов в списке in (что попахивает плохой архитектурой), то лучше использовать join, а не in.
select *
from dual d, table(sys.odcivarchar2list('A','B','C','D','X','Y','Z')) t
where d.dummy = t.column_value
3 фев 11, 12:49    [10176933]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
Archmk
Member

Откуда:
Сообщений: 10
[quot dbms_photoshop]
Archmk
что попахивает плохой архитектурой

Пользователь строит отчет по клиентам. Мы даем ему возможность выбрать нужных клиентов. Клиентов может быть много. Очень много.
3 фев 11, 12:57    [10176987]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Archmk,

А определить табличный тип и передавать масив в bind как этот тип,
например так
работает?
3 фев 11, 16:20    [10178830]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
100500
Member

Откуда:
Сообщений: 124
Archmk,
dbms_photoshop
что попахивает плохой архитектурой


Archmk
Пользователь строит отчет по клиентам. Мы даем ему возможность выбрать нужных клиентов. Клиентов может быть много. Очень много.


Соглашусь с dbms_photoshop. C трудом верится, что у пользователя перед глазами список, скажем так на 100тыщ элементов, из которого ему интерфейс дает выбрать несколько тысяч поодиночке и пользователь сидит и тюкает. Юзабилити такого продукта ниже плинтуса. Ограничивать как-то надо разумными рамками, или темплейт какой-нибудь придумать на фильтрах по атрибутам и правилах-все/все кроме. А когда такой темплейт в базе сохранится, то и запрос от темплейта пойдет, снимая тем самым необходимость перечисления огромного списка id-шек непосредственно в запросе.
3 фев 11, 18:40    [10180133]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
100500
или темплейт какой-нибудь придумать


Чтобы пользователь мог сам сохранить себе шаблончик, ему хоть раз, да надо передать параметры (кто кроме всех). Ну и вообще, передача всего через биндинг, это вроде бы как мейнстрим, маст хэв и ёпрст.
4 фев 11, 15:25    [10184887]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица vs IN  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Сергей Арсеньев
Ну и вообще, передача всего через биндинг, это вроде бы как мейнстрим, маст хэв и ёпрст.
Не считая той маленькой детали, что если у него всего клиентов 10000, а передает он 7 или 7000, то оптимальный для двух случаев скорее всего должен быть разным.
4 фев 11, 16:05    [10185198]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить