Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 индексирование clob полей  [new]
osi777
Member

Откуда: Краснодар
Сообщений: 348
есть таблица T1, в ней поле Р1 типа clob , как создать индекс у данного столбца? слышал создание отлицается от индексов простых типов данных.
24 авг 06, 06:58    [3046370]     Ответить | Цитировать Сообщить модератору
 Re: индексирование clob полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Если идет речь про сегменты типа LOBINDEX и LOBSEGMENT, то к привычному индексированию они отношения не имеют -- это внутренняя реализация хранения LOB данных

PS. Интересно, зачем возникла необходимость индексировать LOB-поля? Может нужно InterMedia (OracleText) ?
24 авг 06, 07:03    [3046373]     Ответить | Цитировать Сообщить модератору
 Re: индексирование clob полей  [new]
RA\/EN
Member

Откуда:
Сообщений: 3659
Можно так:

SQL> create table clob_table(clob_column clob);

Table created

SQL> insert into clob_table(clob_column) 
  2  select to_char(rownum)||rpad('1',rownum,'1') from dual
  3  connect by level<=3990;

3990 rows inserted

SQL> commit;

Commit complete

SQL> create index clob_index_fbi on clob_table(to_char(clob_column));

Index created

SQL> analyze table clob_table compute statistics for all indexes;

Table analyzed

SQL> explain plan for select * from clob_table where to_char(clob_column) like '99%';

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
| Id  | Operation                   | Name           | Rows  | Bytes | Cost (%CP
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                |   184 |   359K|     3   (
|   1 |  TABLE ACCESS BY INDEX ROWID| CLOB_TABLE     |   184 |   359K|     3   (
|   2 |   INDEX RANGE SCAN          | CLOB_INDEX_FBI |    33 |       |     2   (
--------------------------------------------------------------------------------
Note
-----
   - 'PLAN_TABLE' is old version

12 rows selected

SQL> drop index clob_index_fbi;

Index dropped

SQL> explain plan for select * from clob_table where to_char(clob_column) like '99%';

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
---------------------------------------------------------------------
| Id  | Operation         | Name       | Rows  | Bytes | Cost (%CPU)|
---------------------------------------------------------------------
|   0 | SELECT STATEMENT  |            |   184 |   359K|    77   (4)|
|   1 |  TABLE ACCESS FULL| CLOB_TABLE |   184 |   359K|    77   (4)|
---------------------------------------------------------------------
Note
-----
   - 'PLAN_TABLE' is old version

11 rows selected

SQL> 

Но если поле больше 4000, тогда упс:

SQL> delete clob_table;

3990 rows deleted

SQL> commit;

Commit complete

SQL> insert into clob_table(clob_column)
  2  select to_char(rownum)||rpad('1',rownum,'1') from dual
  3  connect by level<=5000;

insert into clob_table(clob_column)
select to_char(rownum)||rpad('1',rownum,'1') from dual
connect by level<=5000

ORA-01489: result of string concatenation is too long

SQL> insert into clob_table(clob_column)
  2  select to_clob(rownum)||to_clob(rpad('1',4000,'1')) from dual
  3  connect by level<=1000;

1000 rows inserted

SQL> commit;

Commit complete

SQL> create index clob_index_fbi on clob_table(to_char(clob_column));

create index clob_index_fbi on clob_table(to_char(clob_column))

ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 4001, maximum: 4000)

SQL> create index clob_index_fbi on clob_table(to_char(substr(clob_column,1,4000)));

Index created

Соответственно, перестраивать запрос.

Вот только оно кому надо?
24 авг 06, 12:02    [3047449]     Ответить | Цитировать Сообщить модератору
 Re: индексирование clob полей  [new]
osi777
Member

Откуда: Краснодар
Сообщений: 348
да именно Oracle Text.
прошу поподробнее...
24 авг 06, 13:25    [3048046]     Ответить | Цитировать Сообщить модератору
 Re: индексирование clob полей  [new]
contr
Member

Откуда:
Сообщений: 1909
osi777
да именно Oracle Text.
прошу поподробнее...

Подробнее - в доке по Oracle Text, там с примерами.
Никаких ухищрений не требуется.
24 авг 06, 13:28    [3048074]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить