Oracle:在包含分区LOB列的表上创建索引

时间:2016-11-07 08:33:11

标签: sql oracle oracle11g

我想在Oracle DD中创建索引( Oracle Database 11g企业版11.2.0.4.0 - 64位生产) 我从Oracle文档中读到,为了提高查询性能,我可以在分区LOB列上创建索引。例如:

CREATE INDEX index_name 
   ON table_name (LOB_column_1, LOB_column_2, ...) LOCAL;

我已经尝试了

CREATE INDEX fullsearch_description ON T_DESCRIPTION (UPPER(text));

但是我收到了一个错误:

ERRO

r starting at line : 1 in command -
CREATE INDEX fullsearch_description ON T_DESCRIPTION (UPPER(text))
Error at Command Line : 1 Column : 55
Error report -
SQL Error: ORA-02327: cannot create index on expression with datatype LOB
02327. 00000 -  "cannot create index on expression with datatype %s"
*Cause:    An attempt was made to create an index on a non-indexable
           expression.
*Action:   Change the column datatype or do not create the index on an
           expression whose datatype is one of  VARRAY, nested table, object,
           LOB, or  REF.

1 个答案:

答案 0 :(得分:3)

您无法在LOB列上构建B树。 在case upper(lob) returns lob中。并且oracle不能使用lob来构建索引。

你可以使用这样的东西。因为函数索引的结果是varchar2。但我不认为这个解决方案很有用。

CREATE INDEX fullsearch_description ON T_DESCRIPTION (UPPER(dbms_lob.substr(text,1,1000)));

在lob列上,您可以使用域索引。  Database Data Cartridge - 有关于域索引的章节。以及如何实现它。 (Using Extensible Indexing, Building Domain Indexes, Defining Operators, Extensible Indexing Interface ,Extensible Optimizer Interface) Oracle提供了几种域索引实现。 Oracle Text。 *这些索引方法非常复杂。