前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试555】在Oracle中,全文索引的作用是什么?

【DB笔试面试555】在Oracle中,全文索引的作用是什么?

作者头像
AiDBA宝典
发布2019-09-29 15:29:20
8720
发布2019-09-29 15:29:20
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

在Oracle中,全文索引的作用是什么?

答案部分

Oracle全文索引使Oracle具备了强大的文本检索能力和智能化的文本管理能力。Oracle将全文检索功能做为内置功能提供给用户,使得用户在创建数据库实例时自动安装全文检索。

要使用Oracle全文索引,必须具有CTXAPP角色或者是CTXSYS用户。Oracle全文索引为系统管理员提供CTXSYS用户,为应用程序开发人员提供CTXAPP角色。具有CTXAPP角色的用户可以使用全文索引。全文索引适合于在一些大字段类型中查找匹配关键字,例如搜索引擎(谷歌、百度)常会用到。

下面给出一个使用全文索引的示例:

首先给LHR用户赋予CTAXPP角色:

代码语言:javascript
复制
LHR@orclasm > GRANT CTXAPP TO LHR;
Grant succeeded.
LHR@orclasm > SELECT * FROM USER_ROLE_PRIVS D WHERE D.GRANTED_ROLE='CTXAPP';
USERNAME                       GRANTED_ROLE                   ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
LHR                            CTXAPP                         NO  YES NO

设置词法分析器:

代码语言:javascript
复制
EXEC CTX_DDL.DROP_PREFERENCE('enlexerlhr');
EXEC CTX_DDL.CREATE_PREFERENCE('enlexerlhr','basic_lexer');

常用的词法分析器有3种,①basic_lexer是英文词法;②chiese_vgram_lexer是专门的汉语分析器,支持所有汉字字符集,包括GB231280、ZHS16GBK、UTF8等;③chinese_lexer是一个新的汉语分析器,只支持UTF8字符集。

创建表并创建全文索引:

代码语言:javascript
复制
CREATE TABLE XT_DOCS_LHR (ID NUMBER PRIMARY KEY, TEXT VARCHAR2(80));
INSERT INTO XT_DOCS_LHR VALUES (1,'the first doc');
INSERT INTO XT_DOCS_LHR VALUES (2,'the second doc');
INSERT INTO XT_DOCS_LHR VALUES (3,'the third doc');
COMMIT;

创建索引,指定INDEXTYPE为CTXSYS.CONTEXT:

代码语言:javascript
复制
LHR@orclasm > CREATE INDEX DOC_INDEX_LHR ON XT_DOCS_LHR(TEXT) INDEXTYPE IS CTXSYS.CONTEXT;
Index created.
LHR@orclasm > SELECT * FROM XT_DOCS_LHR WHERE CONTAINS(TEXT, 'first') > 0;
        ID TEXT
---------- -----------------------
         1 the first doc
Execution Plan
----------------------------------------------------------
Plan hash value: 4244292504
---------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |     1 |    67 |     4   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| XT_DOCS_LHR   |     1 |    67 |     4   (0)| 00:00:01 |
|*  2 |   DOMAIN INDEX              | DOC_INDEX_LHR |       |       |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("CTXSYS"."CONTAINS"("TEXT",'first')>0)
Note
-----
   - dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
        137  recursive calls
          0  db block gets
        386  consistent gets
          0  physical reads
          0  redo size
        604  bytes sent via SQL*Net to client
        519  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
LHR@orclasm >   SELECT D.INDEX_NAME, D.INDEX_TYPE, D.ITYP_OWNER, D.ITYP_NAME,D.DOMIDX_STATUS
  2      FROM DBA_INDEXES D
  3     WHERE D.INDEX_NAME LIKE 'DOC_INDEX_LHR%';
INDEX_NAME        INDEX_TYPE    ITYP_OWNER    ITYP_NAME    DOMIDX_STATU
----------------- ------------- ------------- ------------ ------------
DOC_INDEX_LHR     DOMAIN        CTXSYS        CONTEXT      VALID

可以看到查询中使用到了全文索引。当然,Oracle的全文索引远比这个例子复杂,想深入学习Oracle全文索引的读者可以参考Oracle官方文档。

& 说明:

有关全文索引的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139034/

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档