powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Unique constraint + index
5 сообщений из 55, страница 3 из 3
Unique constraint + index
    #39264433
Апну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров , понимаю, что хочу невозможного, потому перестаю хотеть )
...
Рейтинг: 0 / 0
Unique constraint + index
    #39264453
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апну--Eugene--простите, а чем именно не устраивает такой индекс, если id-таки уникально?
или вас не устраивает единовременное существование обоих индексов?
Не устраивает тем, что составной индекс строится по полям where и select, т.о. при запросе к таблице не обращаемся, все берем из индекса, что ощутимо ускоряет запрос.
Вячеслав Любомудров , да.
docs.oracle.comOracle performs a unique scan if a statement contains a UNIQUE or a PRIMARY KEY constraint that guarantees that only a single row is accessed.
Замечательно и вроде как известно, но ок:
1. делаем табличку
Код: plsql
1.
2.
3.
CREATE TABLE test_tab
AS  
SELECT ROWNUM ID, '123' vl FROM dual CONNECT BY LEVEL<1000000;


2. делаем нужный составной индекс
Код: plsql
1.
CREATE INDEX test_tab_i ON test_tab(id, vl) TABLESPACE uix;


3. создаем констрейнт
Код: plsql
1.
ALTER TABLE test_tab ADD CONSTRAINT test_tab_uk PRIMARY KEY (id) USING INDEX test_tab_i;


(можно уник., результат тот же)
Условие изложенное в доке выполнено? Вроде да.
Но
Код: plsql
1.
SELECT ID FROM test_tab WHERE id = :id


дает range scan :( Только что там не сказано, что он обязательно выберет unique scan, но все равно досадно )

секунду, но если у вас id уникально, то объём промолоченной инфы должен быть одинаков что для range что для uniq scan

Вы не могли бы статистику аутотрейса показать?
...
Рейтинг: 0 / 0
Unique constraint + index
    #39264454
нэ нэгоро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonhson,

полагаю, что range scan не остановится на первой попавшейся листоноде индекса, что может привести к дополнительному чтению.
...
Рейтинг: 0 / 0
Unique constraint + index
    #39264473
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нэ нэгороJonhson,

полагаю, что range scan не остановится на первой попавшейся листоноде индекса, что может привести к дополнительному чтению.

с учётом того, что id 1-й в индексе, то максимум просканит на 1 вперёд, дальше просто нет смысла.

И вот что-бы убедиться можно запустить autotrace и посмотреть стату на варианте с unique index и без такового
...
Рейтинг: 0 / 0
Unique constraint + index
    #39265464
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АпнуСейчас в плане по рейнджскану выдает кост в сотни и выборку кучи байт/строк (статистика собрана).Ну продемонстрируй, не стесняйся.
В нормальных условиях разница между range & unique будет в том, что в последнем случае будет использовано чуть меньше латчей,
но заметно это будет разве что если у тебя система с 100500 одновременных сессий.
При корректной статистике кардинальности будут идентичными.
Оракл увидит что число distinct values первого столбца равно числу строк.
...
Рейтинг: 0 / 0
5 сообщений из 55, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Unique constraint + index
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]