Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Пт Июл 03, 2015 16:58  select |
|
Полезность: Нет оценки
|
Товарищи, подскажите при обращении к ibs.objects, если посмотреть план - орыкл смотрит чуть не все таблицы? Это при том, что обращаюсь по ID
Код: | select * from ibs.objects where id = 77541085012 |
можно ли с помощью какого-нибудь хинта получить значение быстро, не заставляя его проверять этот ID в каждой таблице? |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Пт Июл 03, 2015 20:18   |
|
Полезность: Нет оценки
|
1. там же INDEX UNIQUE SCAN по всем таблицам, куда же быстрее?
2. ежели вы знаете тип того id, то добавьте это условие. Например:
Код: | and class_id = 'ABBREVIATION' |
|
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пн Июл 06, 2015 07:15   |
|
Полезность: Нет оценки
|
prog пишет: | 1. там же INDEX UNIQUE SCAN по всем таблицам, куда же быстрее?
2. ежели вы знаете тип того id, то добавьте это условие. Например:
Код: | and class_id = 'ABBREVIATION' |
|
ежели известен class_id, смысл тогда искать в этой вьюшке?
Ах, как жаль, что идентификатор не состоит из комбинации class_id:id...
wolfio пишет: | Товарищи, подскажите при обращении к ibs.objects, если посмотреть план - орыкл смотрит чуть не все таблицы? Это при том, что обращаюсь по ID |
Не "чуть ли не все", а именно - все.
Это представление состоит из запросов, объединённых по union all по всем таблицам модели данных.
wolfio пишет: | Код: | select * from ibs.objects where id = 77541085012 |
можно ли с помощью какого-нибудь хинта получить значение быстро, не заставляя его проверять этот ID в каждой таблице? |
низзя.
При чём тут вообще хинты? в каждой из таблиц Oracle пользует самый эффективный индекс, но проблема в том, что таблиц много - это ж union all.
А зачем нужно дёргать эту вьюшку? На моей практике в коде всегда получалось этого избежать. |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Пн Июл 06, 2015 09:04   |
|
Полезность: Нет оценки
|
Цитата: | А зачем нужно дёргать эту вьюшку? На моей практике в коде всегда получалось этого избежать. |
исключительно в целях сопровождения. иногда получаешь ошибку в какой-нибудь операции, с IDшником, и не знаешь от чего он. |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
Вт Июл 07, 2015 06:43   |
|
Полезность: Нет оценки
|
Random пишет: |
Ах, как жаль, что идентификатор не состоит из комбинации class_id:id...
|
Привет, Рандомчик...
в 1с-ке идентификатор составной.
Только зашито 4 значения: {Документ|Справочник|...}{ВидДокумента|ВидСправочника}{N узла для репликации}{ид}...
это 'на всякий случай' - ежель с нуля проектировать систему кто-нить будет... |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пн Июл 20, 2015 03:14   |
|
Полезность: Нет оценки
|
А там id разве не строковый ? |
|
 |
Damir Участник - экстремал
Вступление в Клуб: 29.03.2013
|
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Ср Июл 22, 2015 11:02   |
|
Полезность: Нет оценки
|
Да не я к тому , что может явно надо было строку искать, с апострофами
select * from ibs.objects where id = '77541085012' ? |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Чт Июл 23, 2015 07:21   |
|
Полезность: Нет оценки
|
Alkov пишет: | Да не я к тому , что может явно надо было строку искать, с апострофами
select * from ibs.objects where id = '77541085012' ? |
objects - прекрасное представление. Прекрасное в том смысле, что бесподобно иллюстрирует, к чему приводит бездумное увлечение union all.
Я его иногда для этого использую.
Что касается кавычек - не думаю, что они тут уместны, и вот почему:
Код: | select * from user_tab_cols where table_name = 'OBJECTS' |
TABLE_NAME...COLUMN_NAME...DATA_TYPE
OBJECTS..........ID.......................NUMBER
OBJECTS..........CLASS_ID...........VARCHAR2 |
|
 |
|