powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Партиционирование индекса по нескольким колонкам
11 сообщений из 11, страница 1 из 1
Партиционирование индекса по нескольким колонкам
    #39275086
gVitalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

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

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

Цель сделать индекс глобальным, но при этом использовать RANGE партиционирование по doc_id. Подскажите, как это можно сделать? Сейчас ругается, что есть префиксные колонки. Была мысль сделать партиционирование по функции, которая будет делать concatenate(sysid, year, doc_id), но тоже не получилось.
Подскажите, как это можно решить.
...
Рейтинг: 0 / 0
Партиционирование индекса по нескольким колонкам
    #39275125
Фотография 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
Партиционирование индекса по нескольким колонкам
    #39275259
gVitalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

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

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


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

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

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

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

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

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

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

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


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