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

Откуда: Боярышник
Сообщений: 1973
Задача: создать индекс из нескольких двух колонок таблицы.
Вопрос: как неинтуитивным путем понять в каком порядке их расположить?
7 фев 17, 13:01    [20188446]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
AmKad
Member

Откуда:
Сообщений: 4454
--Eugene--,

Почитай Льюиса, прокачаешь свою интуицию.
7 фев 17, 13:02    [20188458]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Для начала, придумай запросы, которые будут типичны для этой таблички и которым понадобится индекс
Если всегда на равенство обоих колонок, то выбирай первую менее селективной и включи COMPRESS
7 фев 17, 13:06    [20188481]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
AmKad
Member

Откуда:
Сообщений: 4454
Вячеслав Любомудров
Если всегда на равенство обоих колонок, то выбирай первую менее селективной и включи COMPRESS
А я бы в таком случае выбрал в качестве первой наиболее селективную.
7 фев 17, 13:09    [20188517]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
А смысл?
7 фев 17, 13:21    [20188592]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Солидарен с AmKad
Guest
Вячеслав Любомудров
А смысл?


Мало - ли, вдруг по высоко-селективному браться нет-нет, а таки придется. А низкоселективному индекс как мертвому припарка.
7 фев 17, 13:41    [20188750]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
постит очевидное
Guest
С первым малоселективным можно INDEX SKIP SCAN делать
7 фев 17, 13:51    [20188802]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
Товагищи, подскажите как вычислить селективность колонки для данного случая (с учетом перекоса данных, если таковой закономерен)?
7 фев 17, 13:58    [20188849]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Ну дык по-этому и был вопрос по поводу запросов
Также, понятно, что для уникального столбца второй нужен только для невляпывания в саму табличку -- тут естественно, первым уникальный, а лучше вообще IOT

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

Ну и естественно, тестирование -- лучший арбитр
7 фев 17, 14:03    [20188875]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Короче, я опять какую-то херню понес

Надо интересоваться у ТС, что есть, как собирается обращаться и что, собственно говоря, хочет получить
7 фев 17, 14:08    [20188900]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
Ёпт, я думал, есть какой-то общий подход..
7 фев 17, 14:18    [20188943]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 4901
--Eugene--,

Да, выглядит он так - почитай Льюиса, сначала поставь колонки по убыванию/возрастанию селективности, потом потестируй на реальных запросах по логике твоего бизнеса и выбери наиболее удобный лдя тебя вариант.
7 фев 17, 14:54    [20189161]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Еще раз -- самое главное, какие запросы туда будут, с какими предикатами и что ты от этого индекса ждешь
7 фев 17, 14:57    [20189187]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 5891
IMHO если индексы построили правильно (реально по тем двум колонкам, которые нужны) и запросов, где поиск идет по одной из колонок нет - то IMHO в 90% случаев, в реальной системе, будет "фиолетово".

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

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

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

IMHO & AFAIK
7 фев 17, 15:30    [20189360]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Vint
Member

Откуда: Таган-москва
Сообщений: 4335
Leonid Kudryavtsev,
+1
но еще хочется добавить, иногда индексы приходиться убивать чтобы другие индексы начали работать без велосипедов. поэтому перед созданием очередного шедевра необходимо сначала посмотреть что за шедевры уже создавали до тебя)
7 фев 17, 16:29    [20189778]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
ind_14
Guest
--Eugene--,
А зачем вам индекс из 2х колонок? Почему не подойдет из одной?
7 фев 17, 17:45    [20190176]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
ind_14,

ну допустим таблица партицирована двухуровнево (списками), а индекс нужен локальный по первичному ключу (который есть суть третья колонка)
7 фев 17, 18:17    [20190271]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
трехколоночный индекс нужен в идеале, не двух
7 фев 17, 18:19    [20190278]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
-2-
Member

Откуда:
Сообщений: 12921
ind_14
Почему не подойдет из одной?
Стоило бы начать с количества строк. Зачем нужно хранить более одной строки, достаточно хранить одну самую любимую. Тогда и индексов не понадобится вообще.
7 фев 17, 18:27    [20190298]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
-2-
достаточно хранить одну самую любимую. Тогда и индексов не понадобится вообще.
пошел выбирать самую любимую строку
7 фев 17, 18:31    [20190311]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
--Eugene--
ind_14,

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


Какой смысл первичный ключ делать локальным?
9 фев 17, 11:34    [20196081]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
fortnet,

Я не собираюсь делать индекс первичного ключа локальным (хотя, может быть, имело бы смысл, не рассматривал идею). Индекс первичного ключа так и остается несекционированным.
Но рядом будет составной локальный индекс, включающий как ключи секционирования, так и первичного ключа.
9 фев 17, 12:19    [20196235]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
kaldorey
Member

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

например, exchange partition including indexes
9 фев 17, 17:45    [20197861]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
pihel
Member

Откуда: СПБ
Сообщений: 123
kaldorey,

+ возможно отключения частями при вставке и частичного ребилда. И добавление колонки партиционирования может уменьшить высоту индекса.
10 фев 17, 09:55    [20199345]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

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

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

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



Первичный ключ судя по предыдущему посту не составной. Можете привести пример,
где необходим такой составной локальный индекс.
10 фев 17, 10:41    [20199519]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
fortnet,

Имеет ли смысл секционирование уникального индекса?
(в том ответе подспудно имеется в виду и корректировка самих запросов - добавление предикатов с ключами секционирования)
10 фев 17, 12:52    [20200126]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
--Eugene--,

ясно -

у вас идея фикс о локальном уникальном индексе, об уникальности которого знаете только вы.
Иначе говоря, вы путаете высокоселективный индекс с уникальным.
Уникальный индекс для партицированных таблиц всегда должен быть глобальным .
Если это не так - см. пост выше о проблемах вставки.
Поэтому использовать столбец , на котором он построен в связке с другими столбцами для построения локального индекса бессмысленно.
Собственно поэтому и был задан вопрос о примере .
10 фев 17, 14:53    [20200894]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Ну, если только уникальный ключ не является ключем секционирования

И еще раз аффтару: озвучь запросы, для которых ты хочешь создать новый индекс
10 фев 17, 15:02    [20200935]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
Вячеслав Любомудров,
Да, соглашусь, с этими ограничениями можно построить уникальный индекс партицированный.
И да, собственно, зачем эта уникальность?
10 фев 17, 15:14    [20200990]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Не понял
Вот есть у меня куча табличек, которые разбиты по ID (ID в формате дата+sequence -- фиксированной длины) -- я легко делю исторические секции по году/полугоду
И PK работает и архивные секции легко нарезаются
10 фев 17, 15:26    [20201047]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
Вячеслав Любомудров,

именно.

А, уважаемый fortnet, запросы простые. Например:
select * from trades where is_hot = 'Y' and bank_id = :bank_id and trade_id = :trade_id
- оно с локальным индексом, включающим все три колонки (а первые две - ключи секционирования) будет работать на порядки быстрее в данном случае, поскольку используются "горячие данные", коих 5% от всего объема.
И таких запросов (использующих is_hot = 'Y' - более 90% от всей массы).
10 фев 17, 16:32    [20201321]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Я вообще-то против, что в первичный ключ добавлять еще и ключ секционирования, чтоб сделать его индекс локальным
На мой взгляд -- в этом случае лучше глобальный индекс
10 фев 17, 16:36    [20201335]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
Вячеслав Любомудров,

Вот если бы можно было партицировать индекс по колонкам, не перечисленным в нем - это был бы идеальный вариант.
А так я вынужден создавать локальные индексы, поскольку необходимо партицировать их списками..
10 фев 17, 16:54    [20201383]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
--Eugene--
Вячеслав Любомудров,

именно.

А, уважаемый fortnet, запросы простые. Например:
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'
и только с индексом сообразит куда смотреть? Ключ секционирования - это что по вашему?
16 фев 17, 16:58    [20218623]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
fortnet,

прошу прощения, запросы не такие уж и простые, как теперь смотрю..
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
16 фев 17, 18:45    [20219030]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
--Eugene--,

Нет разницы.
Этот запрос не сильно отличается от предыдущего.
Создайте простой локальный (или глобальный партицированный - хотя по запросу не видно, что он нужен) индекс
и смотрите планы. И зачем хинтовать такие простые запросы.
Для данного запроса нужно только, что бы он выбрал требуемую партицию на основе предиката по is_hot in ('Y', :is_hot) ( и возможно подпартицию по bank_id ) и применил к ней локальный индекс для поиска по trade_id . Всё.
Незачем городить огород с уникальностью.
17 фев 17, 10:09    [20220168]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
fortnet
И зачем хинтовать такие простые запросы
Затем что если не хинтовать, оракл сваливается на уникальный (нелокальный) индекс:
+ С хинтом
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.
+ Без хинта
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.
Может показаться, что попугаи те же, только вот на практике с локальным в разы быстрее.
17 фев 17, 12:17    [20220771]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2695
--Eugene--
Может показаться, что попугаи те же, только вот на практике с локальным в разы быстрее.

Ты бы хоть пример придумал, который покажет твое быстрее )
Какой толк от примера на разных наборах данных, да еще с одинаковыми оценками?
17 фев 17, 13:01    [20220960]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
AlexFF__|,

Счего наборы данных разные?
таблица та же
запрос тот же
17 фев 17, 13:23    [20221053]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
--Eugene--,
DDL по таблице приложите. Запутали совсем индексами. Какие , что ... Непонятно ничего.
17 фев 17, 13:50    [20221173]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
fortnet,
+ DDL
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;
17 фев 17, 14:23    [20221354]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
Прошу прощения,
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;
17 фев 17, 14:52    [20221523]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
booby
Member

Откуда:
Сообщений: 1395
--Eugene--
Прошу прощения,
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, BE_ID, HOT_YN) LOCAL;

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

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

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--]Прошу прощения,
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID, [s]BE_ID,[/s] HOT_YN) LOCAL;

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


итог:
CREATE UNIQUE INDEX I4_LOC ON T1(TRADE_ID) LOCAL;
17 фев 17, 15:56    [20221911]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
booby,

знаток..
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
17 фев 17, 16:15    [20221987]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
pihel
Member

Откуда: СПБ
Сообщений: 123
--Eugene--,

если все запросы идут по одной из партиций, то локальный индекс лучше, т.к. локальные индексы будут совсем крошечные и у них будет маленькая высота (blevel)
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
------------------------------ ----------
[b]SYS_C00425187                           1[/b]

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
[b]BE_3                           BE_3_HOT_Y                              0[/b]
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.
17 фев 17, 16:24    [20222015]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
pihel
локальные индексы по горячим данным имеют высоту = 0, глобальный же высоту = 1.
чево?
где тут глобальный индекс вообще?
19 фев 17, 01:54    [20225505]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
pihel
Member

Откуда: СПБ
Сообщений: 123
--Eugene--
pihel
локальные индексы по горячим данным имеют высоту = 0, глобальный же высоту = 1.
чево?
где тут глобальный индекс вообще?


SYS_C00425187 глобальный индекс от TRADE_ID NUMBER PRIMARY KEY,
19 фев 17, 12:20    [20225802]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
fortnet
Member

Откуда:
Сообщений: 518
--Eugene--,

http://www.sql.ru/forum/725353/particii-kak-pravilno-index-local-i-primary-key
20 фев 17, 11:58    [20228015]     Ответить | Цитировать Сообщить модератору
 Re: Порядок расположения колонок составного индекса  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 1973
pihel,

ппц.
до последнего времени считал, что Глобальными могут быть только Партицированные индексы. ан нет
зачем их называть Глобальными, если они Непартицированные и - соответственно - не могут быть локальными??
от ихней номенклатуры голова пухнет.
20 фев 17, 12:06    [20228064]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Oracle Ответить