Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Партиционирование индекса по нескольким колонкам / 11 сообщений из 11, страница 1 из 1
16.07.2016, 13:27:00
    #39275086
gVitalik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
Добрый день,

Сразу прошу прощения, что если вопрос регулярный и решение можно найти на каждом углу. Прошу ткнуть пальцем. Искал, не нашел.

Проблема следующего характера сделал партиционирование для таблицы. Есть индекс, который состоит из нескольких
колонок:
sysid char(4)
year char(4)
doc_id char(10)
Все обращения к индексу всегда идут с указанием всех 3 полей.

Цель сделать индекс глобальным, но при этом использовать RANGE партиционирование по doc_id. Подскажите, как это можно сделать? Сейчас ругается, что есть префиксные колонки. Была мысль сделать партиционирование по функции, которая будет делать concatenate(sysid, year, doc_id), но тоже не получилось.
Подскажите, как это можно решить.
...
Рейтинг: 0 / 0
16.07.2016, 18:14:58
    #39275125
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
gVitalikЦель сделать индекс глобальным, но при этом использовать RANGE партиционирование по doc_id.

Global non-prefixed индекс не поддерживается, что означает partitioning key поле должно быть первым в глобальном партиционированом индексе:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
SQL> create table tbl(
  2                   sysid char(4),
  3                   year char(4),
  4                   doc_id char(10)
  5                  )
  6    partition by range(doc_id)
  7    (
  8     partition p1000 values less than(1000),
  9     partition p2000 values less than(2000),
 10     partition pmaxc values less than(maxvalue)
 11    )
 12  /

Table created.

SQL> create index tbl_idx1
  2    on tbl(
  3           sysid,
  4           year,
  5           doc_id
  6           )
  7    global partition by range(doc_id)
  8    (
  9     partition p1000 values less than(1000),
 10     partition p2000 values less than(2000),
 11     partition pmaxc values less than(maxvalue)
 12    )
 13  /
  global partition by range(doc_id)
                                  *
ERROR at line 7:
ORA-14038: GLOBAL partitioned index must be prefixed


SQL> create index tbl_idx1
  2    on tbl(
  3           doc_id,
  4           year,
  5           sysid
  6           )
  7    global partition by range(doc_id)
  8    (
  9     partition p1000 values less than(1000),
 10     partition p2000 values less than(2000),
 11     partition pmaxc values less than(maxvalue)
 12    )
 13  /

Index created.

SQL> 



SY.
...
Рейтинг: 0 / 0
17.07.2016, 19:17:05
    #39275259
gVitalik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
SY,

Спасибо! А возможно в качестве распределения использовать CONCATENATE по нескольким колонкам?
...
Рейтинг: 0 / 0
17.07.2016, 21:37:50
    #39275279
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
Ты сначала обьясни в чем у тебя проблема. Чем тебе не угодил локальный партицированный индекс?

SY.
...
Рейтинг: 0 / 0
18.07.2016, 10:57:16
    #39275456
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
gVitalik,


если у тебя всегда используется все три колонки, то ты можешь спокойно поставить socks на первую позицию в индексе.
...
Рейтинг: 0 / 0
20.07.2016, 11:10:10
    #39276915
gVitalik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
SY,

Локальный индекс не подходит, потому что таблица разбивается по полю, которого нет в индексе. Почти все индексы, которые можно было сделать локальными, я сделал. Но колонок с датами в таблице несколько и в некоторых индексах используется партиционируемая колонка, а в некоторых индексах используется другая дата. Есть индексы, без дат, но с уникальными номерами объектов. Тем не менее я хочу и их тоже разбить на партиции.

Почему спросил про concatenate, потому что в моем случае перестановка полей все равно выдоло ошибку:
ORA-14038: GLOBAL partitioned index must be prefixed
...
Рейтинг: 0 / 0
20.07.2016, 11:52:53
    #39276956
gVitalik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
MasterZiv,

Боюсь не знаю, что такое socks. Киньте, пожалуйста, линк, потому что все что я нашел, это ссылки на сокеты и настройку сетевых параметров ORACLE.
...
Рейтинг: 0 / 0
20.07.2016, 13:16:56
    #39277045
JaRo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
gVitalikЛокальный индекс не подходит, потому что таблица разбивается по полю, которого нет в индексе.То есть вы хотите, чтобы индекс был партиционирован, но при этом он не содержал вообще ключа партиционирования? Само собой так не получится. Как вы это себе представляете?

И собственно как вы это представляете к использованию? Допустим, у вас бы получилось создать такой индекс. Но сами запросы бы у вас были без ключа партиционирования, правильно?(иначе чтобы вам мешало локальный индекс сделать). То есть был бы перебор всех партиций, так? И в чём фишка вашей задумки?
...
Рейтинг: 0 / 0
20.07.2016, 13:23:28
    #39277051
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
Для глобального индекса ключ секционирования индекса не обязательно равен ключу секционирования таблицы, но он должен быть первым в этом индексе
Раз все равно задаются условия для всех трех колонок, то порядок их в индексе для тебя не очень важен (есть конечно ньюансы для COMPRESSED индексов), поэтому ставь колонку разбиения индекса первой. Что и пытался тебе донести MasterZiv (но что-то пошло не так )
...
Рейтинг: 0 / 0
20.07.2016, 13:25:30
    #39277055
gVitalik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
JaRo,

Задумка использовать глобальный индекс. Но чтобы он был не сильно большим то нарезать его тоже на партиции. Но нарезать по другим правилам, нежели нарезали саму таблицу.
...
Рейтинг: 0 / 0
20.07.2016, 13:34:36
    #39277067
gVitalik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование индекса по нескольким колонкам
gVitalik,

не смог добавить в прошлое сообщение, поэтому напишу отдельно.

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


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