powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Порядок расположения колонок составного индекса
49 сообщений из 49, показаны все 2 страниц
Порядок расположения колонок составного индекса
    #39399987
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: создать индекс из нескольких двух колонок таблицы.
Вопрос: как неинтуитивным путем понять в каком порядке их расположить?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39399990
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

Почитай Льюиса, прокачаешь свою интуицию.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39399995
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала, придумай запросы, которые будут типичны для этой таблички и которым понадобится индекс
Если всегда на равенство обоих колонок, то выбирай первую менее селективной и включи COMPRESS
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400005
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕсли всегда на равенство обоих колонок, то выбирай первую менее селективной и включи COMPRESSА я бы в таком случае выбрал в качестве первой наиболее селективную.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400025
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А смысл?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400062
Вячеслав ЛюбомудровА смысл?

Мало - ли, вдруг по высоко-селективному браться нет-нет, а таки придется. А низкоселективному индекс как мертвому припарка.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400083
С первым малоселективным можно INDEX SKIP SCAN делать
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400097
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товагищи, подскажите как вычислить селективность колонки для данного случая (с учетом перекоса данных, если таковой закономерен)?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400104
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык по-этому и был вопрос по поводу запросов
Также, понятно, что для уникального столбца второй нужен только для невляпывания в саму табличку -- тут естественно, первым уникальный, а лучше вообще IOT

Но, вот скажем, табличка тех же платежей/звонков и т.п. где есть дата и контора
За один день у определенной конторы в среднем было 10 платежей, но с другой стороны там 10000 контор (из которых как правило, большая часть мертвых), а в день совершается 10000 платежей/звонков (но даты с секундами) -- в одну секунду в среднем 8.
Дата здесь селективней, вот только в здравом уме никто не сделает индекс (дата, контора)
Наверное, таки, небольшая подмена понятий :-)

Ну и естественно, тестирование -- лучший арбитр
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400117
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, я опять какую-то херню понес

Надо интересоваться у ТС, что есть, как собирается обращаться и что, собственно говоря, хочет получить
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400133
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёпт, я думал, есть какой-то общий подход..
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400167
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

Да, выглядит он так - почитай Льюиса, сначала поставь колонки по убыванию/возрастанию селективности, потом потестируй на реальных запросах по логике твоего бизнеса и выбери наиболее удобный лдя тебя вариант.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400173
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз -- самое главное, какие запросы туда будут, с какими предикатами и что ты от этого индекса ждешь
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400212
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO если индексы построили правильно (реально по тем двум колонкам, которые нужны) и запросов, где поиск идет по одной из колонок нет - то IMHO в 90% случаев, в реальной системе, будет "фиолетово".

Т.к. в большинстве случае, ошибаются уже на первом шаге, выбор индексов и колонок которые требуются, то система будет "стоять колом" в независимости от порядка полей )))

Лично я этим никогда не заморачивался, а порядок колонок указывал в "интиетивно понятном" виде )))

В тех 1-10% процентов случаев, где это важно - очень большая таблица или очень специфическое распределение данных или очень специфические запросы/план, такой выбор по "общим правилам" сформулированым на форуме все равно не сделать. Будет очень сильно зависит от конкретной проблемы с производительностью.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400258
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
+1
но еще хочется добавить, иногда индексы приходиться убивать чтобы другие индексы начали работать без велосипедов. поэтому перед созданием очередного шедевра необходимо сначала посмотреть что за шедевры уже создавали до тебя)
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400322
ind_14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--,
А зачем вам индекс из 2х колонок? Почему не подойдет из одной?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400364
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ind_14,

ну допустим таблица партицирована двухуровнево (списками), а индекс нужен локальный по первичному ключу (который есть суть третья колонка)
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400366
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
трехколоночный индекс нужен в идеале, не двух
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400375
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ind_14Почему не подойдет из одной?Стоило бы начать с количества строк. Зачем нужно хранить более одной строки, достаточно хранить одну самую любимую. Тогда и индексов не понадобится вообще.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39400378
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-достаточно хранить одну самую любимую. Тогда и индексов не понадобится вообще.пошел выбирать самую любимую строку
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39401482
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--ind_14,

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

Какой смысл первичный ключ делать локальным?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39401513
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnet,

Я не собираюсь делать индекс первичного ключа локальным (хотя, может быть, имело бы смысл, не рассматривал идею). Индекс первичного ключа так и остается несекционированным.
Но рядом будет составной локальный индекс, включающий как ключи секционирования, так и первичного ключа.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39401808
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnet,

например, exchange partition including indexes
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402039
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kaldorey,

+ возможно отключения частями при вставке и частичного ребилда. И добавление колонки партиционирования может уменьшить высоту индекса.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402070
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kaldorey,

влияние на производительность этой редкой операции мизерно, а проблемы с ожиданиями во время вставки в таблицу из-за проверки ограничения по ключу будут вполне ощутимыми.

--Eugene-- Но рядом будет составной локальный индекс, включающий как ключи секционирования, так и первичного ключа.



Первичный ключ судя по предыдущему посту не составной. Можете привести пример,
где необходим такой составной локальный индекс.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402249
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnet,

Имеет ли смысл секционирование уникального индекса?
(в том ответе подспудно имеется в виду и корректировка самих запросов - добавление предикатов с ключами секционирования)
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402323
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

ясно -

у вас идея фикс о локальном уникальном индексе, об уникальности которого знаете только вы.
Иначе говоря, вы путаете высокоселективный индекс с уникальным.
Уникальный индекс для партицированных таблиц всегда должен быть глобальным .
Если это не так - см. пост выше о проблемах вставки.
Поэтому использовать столбец , на котором он построен в связке с другими столбцами для построения локального индекса бессмысленно.
Собственно поэтому и был задан вопрос о примере .
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402332
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, если только уникальный ключ не является ключем секционирования

И еще раз аффтару: озвучь запросы, для которых ты хочешь создать новый индекс
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402337
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,
Да, соглашусь, с этими ограничениями можно построить уникальный индекс партицированный.
И да, собственно, зачем эта уникальность?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402342
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял
Вот есть у меня куча табличек, которые разбиты по ID (ID в формате дата+sequence -- фиксированной длины) -- я легко делю исторические секции по году/полугоду
И PK работает и архивные секции легко нарезаются
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402384
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

именно.

А, уважаемый fortnet, запросы простые. Например:
Код: plsql
1.
select * from trades where is_hot = 'Y' and bank_id = :bank_id and trade_id = :trade_id

- оно с локальным индексом, включающим все три колонки (а первые две - ключи секционирования) будет работать на порядки быстрее в данном случае, поскольку используются "горячие данные", коих 5% от всего объема.
И таких запросов (использующих is_hot = 'Y' - более 90% от всей массы).
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402387
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще-то против, что в первичный ключ добавлять еще и ключ секционирования, чтоб сделать его индекс локальным
На мой взгляд -- в этом случае лучше глобальный индекс
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39402393
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

Вот если бы можно было партицировать индекс по колонкам, не перечисленным в нем - это был бы идеальный вариант.
А так я вынужден создавать локальные индексы, поскольку необходимо партицировать их списками..
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39405955
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Вячеслав Любомудров,

именно.

А, уважаемый fortnet, запросы простые. Например:
Код: plsql
1.
select * from trades where is_hot = 'Y' and bank_id = :bank_id and trade_id = :trade_id

- оно с локальным индексом, включающим все три колонки (а первые две - ключи секционирования) будет работать на порядки быстрее в данном случае, поскольку используются "горячие данные", коих 5% от всего объема.
И таких запросов (использующих is_hot = 'Y' - более 90% от всей массы).

А oracle , конечно, без индекса по is_hot будет по всем партициям лазить, даже прочитав условие в предикате is_hot = 'Y'
и только с индексом сообразит куда смотреть? Ключ секционирования - это что по вашему?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406076
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnet,

прошу прощения, запросы не такие уж и простые, как теперь смотрю..
Код: plsql
1.
select /*+index(t my_local_index)*/ * from trades t where is_hot in ('Y', :is_hot) and bank_id = :bank_id and trade_id = :trade_id
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406339
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

Нет разницы.
Этот запрос не сильно отличается от предыдущего.
Создайте простой локальный (или глобальный партицированный - хотя по запросу не видно, что он нужен) индекс
и смотрите планы. И зачем хинтовать такие простые запросы.
Для данного запроса нужно только, что бы он выбрал требуемую партицию на основе предиката по is_hot in ('Y', :is_hot) ( и возможно подпартицию по bank_id ) и применил к ней локальный индекс для поиска по trade_id . Всё.
Незачем городить огород с уникальностью.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406461
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnetИ зачем хинтовать такие простые запросыЗатем что если не хинтовать, оракл сваливается на уникальный (нелокальный) индекс:
С хинтом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SANDBOX@devbox>;explain plan for
  2  select /*+index(t1 i4_loc)*/ *
  3      from t1
  4      where be_id = :v_be_id
  5          and hot_yn in ('Y', :v_hot_yn)
  6          and trade_id = :v_trade_id;

Explained.

SANDBOX@devbox>;select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------
Plan hash value: 1581337439

--------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name   | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |        |     1 |    11 |     3   (0)| 00:00:01 |       |       |
|   1 |  PARTITION LIST SINGLE              |        |     1 |    11 |     3   (0)| 00:00:01 |   KEY |   KEY |
|   2 |   PARTITION LIST SINGLE             |        |     1 |    11 |     3   (0)| 00:00:01 |   KEY |   KEY |
|   3 |    TABLE ACCESS BY LOCAL INDEX ROWID| T1     |     1 |    11 |     3   (0)| 00:00:01 |   KEY |   KEY |
|*  4 |     INDEX UNIQUE SCAN               | I4_LOC |     1 |       |     2   (0)| 00:00:01 |   KEY |   KEY |
--------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("HOT_YN"=:V_HOT_YN AND "TRADE_ID"=TO_NUMBER(:V_TRADE_ID) AND
              "BE_ID"=TO_NUMBER(:V_BE_ID))

17 rows selected.
Без хинта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SANDBOX@devbox>;explain plan for
  2  select *
  3      from t1
  4      where be_id = :v_be_id
  5          and hot_yn in ('Y', :v_hot_yn)
  6          and trade_id = :v_trade_id;

Explained.

SANDBOX@devbox>;select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------
Plan hash value: 874832600

--------------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name          | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |               |     1 |    11 |     3   (0)| 00:00:01 |       |       |
|*  1 |  TABLE ACCESS BY GLOBAL INDEX ROWID| T1            |     1 |    11 |     3   (0)| 00:00:01 | ROWID | ROWID |
|*  2 |   INDEX UNIQUE SCAN                | SYS_C00146066 |     1 |       |     2   (0)| 00:00:01 |       |       |
--------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("BE_ID"=TO_NUMBER(:V_BE_ID) AND ("HOT_YN"=:V_HOT_YN OR "HOT_YN"='Y'))
   2 - access("TRADE_ID"=TO_NUMBER(:V_TRADE_ID))

15 rows selected.
Может показаться, что попугаи те же, только вот на практике с локальным в разы быстрее.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406510
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Может показаться, что попугаи те же, только вот на практике с локальным в разы быстрее.
Ты бы хоть пример придумал, который покажет твое быстрее )
Какой толк от примера на разных наборах данных, да еще с одинаковыми оценками?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406541
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|,

Счего наборы данных разные?
таблица та же
запрос тот же
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406580
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,
DDL по таблице приложите. Запутали совсем индексами. Какие , что ... Непонятно ничего.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406614
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnet,
DDL
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE TABLE T1 (
BE_ID NUMBER NOT NULL,
HOT_YN CHAR(1) DEFAULT 'Y' NOT NULL CHECK (HOT_YN IN ('Y', 'N')),
TRADE_ID NUMBER PRIMARY KEY,
DUMMY01 CHAR(2000),
DUMMY02 CHAR(2000),
...
DUMMY50 CHAR(2000)
)
PARTITION BY LIST (BE_ID)
SUBPARTITION BY LIST (HOT_YN)
(  
  PARTITION BE_1 VALUES (1)
  ( SUBPARTITION BE_1_HOT_Y VALUES ('Y'),
    SUBPARTITION BE_1_HOT_N VALUES ('N') ),
  PARTITION BE_2 VALUES (2)
  ( SUBPARTITION BE_2_HOT_Y VALUES ('Y'),
    SUBPARTITION BE_2_HOT_N VALUES ('N') ),
...
  PARTITION BE_10 VALUES (10)
  ( SUBPARTITION BE_10_HOT_Y VALUES ('Y'),
    SUBPARTITION BE_10_HOT_N VALUES ('N') ),
  PARTITION BE_DEFAULT VALUES (DEFAULT)
  ( SUBPARTITION BE_DEFAULT_HOT_Y VALUES ('Y'),
    SUBPARTITION BE_DEFAULT_HOT_N VALUES ('N') )
)
ENABLE ROW MOVEMENT;

CREATE UNIQUE INDEX I4_LOC ON T1(BE_ID, HOT_YN, TRADE_ID) LOCAL;

...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406657
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения,
Код: plsql
1.
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406739
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Прошу прощения,
Код: plsql
1.
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;


при вашем способе разбиения таблицы, чепуха какая-то, имхо.

(никогда не имев дела с партиционированием, планируя локальный индекс,
я скромно делил бы) условия в запросе сорта

Код: plsql
1.
2.
3.
4.
5.
6.
SANDBOX@devbox>;explain plan for
  2  select *
  3      from t1
  4      where be_id = :v_be_id
  5          and hot_yn in ('Y', :v_hot_yn)
  6          and trade_id = :v_trade_id;



на такие, с которыми работаем механизм выбора партиции и такие, с которыми работает локальный индекс
у вас в одно ведущей партиции не более одного значения be_id - значит это условие для механизма выбора раздела:

[quot --Eugene--]Прошу прощения,
Код: plsql
1.
2.
3.
4.
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;

далее, внутри подраздела hot_yn его значение тоже не меняется, поэтому:
[SRC oracle]CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;



итог:
Код: plsql
1.
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID) LOCAL;
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406755
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

знаток..
Код: plaintext
1.
2.
3.
4.
SANDBOX@devbox>;CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID) LOCAL;
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID) LOCAL
                              *
ERROR at line 1:
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39406760
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--,

если все запросы идут по одной из партиций, то локальный индекс лучше, т.к. локальные индексы будут совсем крошечные и у них будет маленькая высота (blevel)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
insert into T1(BE_ID, HOT_YN, TRADE_ID, DUMMY01, DUMMY02, DUMMY50)
select mod(rownum,3) as BE_ID, case when rownum > 1000000 - 1000 then 'Y' ELSE 'N' END as HOT_YN, rownum as TRADE_ID, rpad('*', 10) as DUMMY01, rpad('*', 20) as DUMMY02, rpad('*', 30) as DUMMY50 
from (select * from dual connect by level <= 1000)
cross join (select * from dual connect by level <= 1000);

CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;

begin
SYS.DBMS_STATS.GATHER_TABLE_STATS(user, 'T1', cascade => true, ESTIMATE_PERCENT=>100);
end;

select index_name, blevel from dba_indexes where table_name = 'T1';

INDEX_NAME                         BLEVEL
------------------------------ ----------
SYS_C00425187                           1

select partition_name, subpartition_name, blevel from DBA_IND_SUBPARTITIONS where index_name = 'I4_LOC'
PARTITION_NAME                 SUBPARTITION_NAME                  BLEVEL
------------------------------ ------------------------------ ----------
BE_DEFAULT                     BE_DEFAULT_HOT_N                        1
BE_DEFAULT                     BE_DEFAULT_HOT_Y                        0
BE_3                           BE_3_HOT_N                              0
BE_3                           BE_3_HOT_Y                              0
BE_2                           BE_2_HOT_N                              1
BE_2                           BE_2_HOT_Y                              0
BE_1                           BE_1_HOT_N                              1
BE_1                           BE_1_HOT_Y                              0


локальные индексы по горячим данным имеют высоту = 0, глобальный же высоту = 1.
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39407351
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihelлокальные индексы по горячим данным имеют высоту = 0, глобальный же высоту = 1.чево?
где тут глобальный индекс вообще?
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39407402
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--pihelлокальные индексы по горячим данным имеют высоту = 0, глобальный же высоту = 1.чево?
где тут глобальный индекс вообще?

SYS_C00425187 глобальный индекс от TRADE_ID NUMBER PRIMARY KEY,
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39407724
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Порядок расположения колонок составного индекса
    #39407728
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihel,

ппц.
до последнего времени считал, что Глобальными могут быть только Партицированные индексы. ан нет
зачем их называть Глобальными, если они Непартицированные и - соответственно - не могут быть локальными??
от ихней номенклатуры голова пухнет.
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Порядок расположения колонок составного индекса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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