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

Откуда: Владивосток
Сообщений: 1072
Подскажите, где прочитать можно.
Т.е. помимо идеологических соображений, какие могут быть реальные ситуации, когда наличие одного только уникального индекса в отсутствие UNIQUE CONSTRAINT не дает оптимизатору возможности принять какое-нибудь оптимальное решение?
30 апр 13, 01:40    [14247069]     Ответить | Цитировать Сообщить модератору
 Re: Как наличие разных constraints может влиять на план  [new]
томас кайт третий
Guest
вероятнее всего в правилах, которые таки возводят констрейнты выше чем индексы и наличие правил меду ними. ну и ошибки цбо тоже никто не отменял. Кстати Льюис не хуже Жюля Верна описал в своей книге
30 апр 13, 03:51    [14247126]     Ответить | Цитировать Сообщить модератору
 Re: Как наличие разных constraints может влиять на план  [new]
Вадиман
Member

Откуда: Владивосток
Сообщений: 1072
Ниче не понял.
Я спрашивал про реальные примеры влияния на оптимизатор или про источник для почитать об этом (что за ссылка на Жуля Верна?).
30 апр 13, 04:02    [14247130]     Ответить | Цитировать Сообщить модератору
 Re: Как наличие разных constraints может влиять на план  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Конкретно UNIQUE CONSTRAINT при существующем UNIQUE INDEX вряд ли влияет на выбор плана
Если индекс USABLE и может использоваться (по предикатам), то наличие/отсутствие констрейнта рояли не играет
По крайней мере, я не встречал

Про другие констрейнты это не всегда так. NOT NULL или его отсутствие может повлиять на возможность использования индексов
FOREIGN KEY может исключить ненужный JOIN с родительской таблицей (а может и поднасрать, добавив дополнительный предикат)
CHECK в некоторых случаях может трансформировать предикат, например CHECK (NAME=UPPER(NAME)) может использовать индекс по NAME, если в запросе используется UPPER(NAME). Фишка называется TRANSITIVE CLOSURE, если мне не изменяет память

Все хорошо описано у Льюиса
30 апр 13, 04:38    [14247133]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить