我想在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.
答案 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。
*这些索引方法非常复杂。