Oracle SYS.ILOxxx индексы создаются автоматически, даже если объект LOB отсутствует - PullRequest
1 голос
/ 10 февраля 2020

При создании таблиц в OracleDB существуют индексы, связанные с таблицей, созданной автоматически. Они являются индексами LOB как SYS.ILOxxx. Какова причина? Как удалить эти индексы?

    create table test_table (
    very_long_title varchar2 (1500 char)
);

1 Ответ

2 голосов
/ 11 февраля 2020

Ваша таблица использует расширенный тип данных . Когда вы запрашиваете 1500 char с набором символов UTF8, каждый символ может использовать до 4 байтов, что означает, что вы действительно запрашиваете 6000 байтовый столбец. Для строк длиной более 4000 байтов Oracle тайно использует большие объекты для хранения данных. Большие объекты хранятся в отдельном сегменте от таблицы и нуждаются в индексе для доступа к своим значениям.

Так что, хотя Oracle поддерживает 32 КБ данных для VARCHAR2, они вроде обмануты, и вы столкнетесь с эти странные проблемы.

Эта проблема не может быть воспроизведена для других, потому что, если для их MAX_STRING_SIZE задано значение STANDARD, 1500 char будет иметь максимальный размер при меньшем размере и не будет использовать большие объекты.

select value
from v$parameter
where name like 'max_string_size';
...