|
|
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня! Наверняка постоянно возникающая задача, у которой есть простое решение, которое не приходит в голову. Дано: большая таблица-миллиардник. Надо написать скрипт, который в неё добавит новое поле(БЕЗ дефолта) и создаст на это поле индекс(на будущее). Если это делать последовательно - просто add column, а потом create index, то на стадии создания индекса мы получаем тормоза, так как таблицу приходится прочитать, чтобы понять, что поле пустое. Понятно, что пока статистика по полю не собрана, бессмысленно от Оракла ждать этих знаний. Можно сразу после добавления поля собрать статистику, но это ведь придется собирать по всей таблице, что приведёт к тем же тормозам. Как правильно написать такой скрипт? Как дать понять Ораклу, что поле - зуб даю - пустое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 23:50 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
field_index, Зачем садятся фигней. Создавать поле и индекс надо стандартными способами. Фулскан таблицы не должен никак сказаться на перфомансе базы. Оракл не блокирует всю таблицу а только часть записей которые фетчит. При добавлении поля может возникнуть блокировка всей таблицы - следовательно добавлять надо в особое согласованное с end-user время т желательно следуя Change management процесу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 10:56 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
Этот комментарий можно спокойно игнорировать -- там не про оракл По поводу "зуб даю" он как-бы и сам прекрасно знает, тем более что начиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словарем Но вот с построением индекса видимо еще недоделали Может в 12.2 что-то поменялось И еще как-то было обсуждение. Типо, что добавление нескольких ограничений целостности (в том числе индексов?) выполняется последовательно one-to-one. Но переведя их в NOVALIDATE последующее переведение в VALIDATE можно сделать одновременно. Подробностей не помню -- может не в лотерею, а в карты, не "Волгу", а "Москвич" и не выиграл, а проиграл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 11:17 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудровначиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словаремС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 07:24 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЭтот комментарий можно спокойно игнорировать -- там не про оракл По поводу "зуб даю" он как-бы и сам прекрасно знает, тем более что начиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словарем Но вот с построением индекса видимо еще недоделали Может в 12.2 что-то поменялось И еще как-то было обсуждение. Типо, что добавление нескольких ограничений целостности (в том числе индексов?) выполняется последовательно one-to-one. Но переведя их в NOVALIDATE последующее переведение в VALIDATE можно сделать одновременно. Подробностей не помню -- может не в лотерею, а в карты, не "Волгу", а "Москвич" и не выиграл, а проиграл https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_3001.htm#i2198241 When you add a column, the initial value of each row for the new column is null. If you specify the DEFAULT clause for a NOT NULL column, then the default value is stored as metadata but the column itself is not populated with data. However, subsequent queries that specify the new column are rewritten so that the default value is returned in the result set. This optimized behavior differs from earlier releases, when as part of the ALTER TABLE operation Oracle Database updated each row in the newly created column with the default value, and then fired any update triggers defined on the table. In this release, no triggers are fired because the default is stored only as metadata. The optimized behavior is subject to the following restrictions: The table cannot have any LOB columns. It cannot be index-organized, temporary, or part of a cluster. It also cannot be a queue table, an object table, or the container table of a materialized view. If the table has a Virtual Private Database (VPD) policy on it, then the optimized behavior will not take place unless the user who issues the ALTER TABLE ... ADD statement has the EXEMPT ACCESS POLICY system privilege. The column being added cannot be encrypted, and cannot be an object column, nested table column, or a LOB column. If you specify the DEFAULT clause for a nullable column, then the default value is added to existing rows as part of this ALTER TABLE statement, and any update triggers defined on the table are fired. This behavior also results if you change a NOT NULL column with a default value to be nullable. Restrictions on Adding Columns The addition of columns is subject to the following restrictions: .... You cannot add a column with a NOT NULL constraint if table has any rows unless you also specify the DEFAULT clause. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 11:30 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
ElicВячеслав Любомудровначиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словаремС. only not null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 11:40 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
AlexFF__|ElicВячеслав Любомудровначиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словаремС.only not nullДо 12.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 13:29 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
field_indexВсем доброго дня! Понятно, что пока статистика по полю не собрана, бессмысленно от Оракла ждать этих знаний. Можно сразу после добавления поля собрать статистику, но это ведь придется собирать по всей таблице, что приведёт к тем же тормозам. а что в этом случае меняет статистика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 13:35 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
DВА, ну вообще-то я действительно не проверяла, но была надежда, что когда Оракл будет видеть, что по столбцу max=min=пусто, то он не пойдёт строить индекс.. Я не права? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 21:39 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
погуглите create index online ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 22:18 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
field_indexкогда Оракл будет видеть, что по столбцу max=min=пусто, то он не пойдёт строить индекс.. Я не права?Как и ориентирующиеся на прошлогодний снег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 22:35 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
DВА, спасибо, я в курсе. Просто думалось, может есть какой-то неизвестный мне хак/синтаксис сделать так, чтобы создание индекса было только действием над словарём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 22:35 |
|
||
|
Создание пустого поля по большой таблице сразу с индексом
|
|||
|---|---|---|---|
|
#18+
field_indexDВА, спасибо, я в курсе. Просто думалось, может есть какой-то неизвестный мне хак/синтаксис сделать так, чтобы создание индекса было только действием над словарём. unusable =) если версия позволит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 09:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39435385&tid=1886128]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 427ms |

| 0 / 0 |
