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

Есть большая таблица, в которую добавляется несколько десятков миллионов записей каждый день (каждый день создается новая субпартиция), на текущий момент в ней содержится более десяти миллиардов записей.

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

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

Может быть есть какие-то шаманские способы быстрого создания такого индекса?
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710264
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.oracle.com/database/121/VLDBG/GUID-256BA7EE-BF49-42DE-9B38-CD2480A73129.htm#VLDBG14102

Одного не понял - для зачем функциональный-то?
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710282
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, спасибо ответ.

Извиняюсь, забыл упомянуть, что используем версию оракла 11.2.0.4, а на 12-м думаю, что предложенное вами решение помогло бы.

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

Индекс создается примерно так:
Код: plsql
1.
2.
CREATE INDEX IDX_MY_TABLE_NEW ON MY_TABLE
(NEW_COLUMN, case when NEW_COLUMN is not null then OTHER_COLUMN END)
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710294
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777Индекс создается примерно так
...глобальный индекс на 10 посуточно-секционированных ярдов... Надеюсь, Вы понимаете что делаете.
По построению индекса на 11g - дабы сократить простой, стройте его online, и НЕ с клиента - либо плюсом локально на сервере БД, либо оракловым заданием.
https://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm#ADMIN11729
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710350
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, спасибо.

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

В чем Ваши сомнения?
Строк с заполненными значениями нового поля будет очень мало, лишь несколько сотен в день, поэтому глобальный индекс будет совсем небольшого размера.
На время вставки новых записей в таблицу это существенно не должно сказаться, т.к. обновлений нового индекса будет очень мало.
А транкейт субпартиции у меня выполняется с опцией:
Код: plsql
1.
UPDATE GLOBAL INDEXES


Что вроде бы тоже должно не на много замедлить данную операцию.
Или я что-то не понимаю?

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

Я бы еще напомнил, что есть смысл установить параметр DDL_LOCK_TIMEOUT -- а то обидно после многочасового построения получить отлуп по блокировке
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710504
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777,

А почему вы не вынесете это поле в отдельную таблицу с общим ПК с основной таблицей?
У нее и размер будет крохотный, и индекс создастся моментально.
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710589
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Создать вспомогательную таблицу можно, но REFERENCE на основную таблицу будет мешать, т.к. транкейт субпартиции основной таблицы невозможен с референсами на нее.
Поэтому перед транкейтом нужно будет отключать этот референс, а после включать.

В будущем нужно будет помнить, что одно поле основной таблицы лежит в другой вспомогательной таблице.

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

Вспомогательная таблица это и есть аналог моего индекса, только в данном случае мне добавится работа по его сопровождению, а плюсов от этого я не вижу.
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710612
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777REFERENCE на основную таблицу будет мешатьну так не делайте его.
Андрей_7777плюсов от этого я не вижу.Не нужно создавать индекс на 10 миллиардах записей.
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710620
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

miksoft> Не нужно создавать индекс на 10 миллиардах записей

Почему? Этот индекс функциональный, в нем будут записи только для строк у которых заполнено новое поле, т.е. индекс будет совсем небольшой.
Какие минусы от создания этого индекса?
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710636
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777Какие минусы от создания этого индекса?Андрей_7777Проблема в том, что данный индекс (даже с опцией parallel) будет создаваться несколько часов, т.к. нужно обойти всю таблицу.
В общем, я не настаиваю.
...
Рейтинг: 0 / 0
Быстрое создание пустого индекса
    #39710665
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНаверное, это связано с
...
а то обидно после многочасового построения
Собственно вот, ибо наблюдал не раз.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Быстрое создание пустого индекса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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