在Oracle中,全文索引的做用是什麼?程序員
Oracle全文索引使Oracle具有了強大的文本檢索能力和智能化的文本管理能力。Oracle將全文檢索功能作爲內置功能提供給用戶,使得用戶在建立數據庫實例時自動安裝全文檢索。面試
要使用Oracle全文索引,必須具備CTXAPP角色或者是CTXSYS用戶。Oracle全文索引爲系統管理員提供CTXSYS用戶,爲應用程序開發人員提供CTXAPP角色。具備CTXAPP角色的用戶能夠使用全文索引。全文索引適合於在一些大字段類型中查找匹配關鍵字,例如搜索引擎(谷歌、百度)常會用到。sql
下面給出一個使用全文索引的示例:數據庫
首先給LHR用戶賦予CTAXPP角色:微信
1LHR@orclasm > GRANT CTXAPP TO LHR;
2Grant succeeded.
3LHR@orclasm > SELECT * FROM USER_ROLE_PRIVS D WHERE D.GRANTED_ROLE='CTXAPP';
4USERNAME GRANTED_ROLE ADM DEF OS_
5------------------------------ ------------------------------ --- --- ---
6LHR CTXAPP NO YES NO
設置詞法分析器:網絡
1EXEC CTX_DDL.DROP_PREFERENCE('enlexerlhr');
2EXEC CTX_DDL.CREATE_PREFERENCE('enlexerlhr','basic_lexer');
經常使用的詞法分析器有3種,①basic_lexer是英文詞法;②chiese_vgram_lexer是專門的漢語分析器,支持全部漢字字符集,包括GB231280、ZHS16GBK、UTF8等;③chinese_lexer是一個新的漢語分析器,只支持UTF8字符集。
app
建立表並建立全文索引:ide
1CREATE TABLE XT_DOCS_LHR (ID NUMBER PRIMARY KEY, TEXT VARCHAR2(80));
2INSERT INTO XT_DOCS_LHR VALUES (1,'the first doc');
3INSERT INTO XT_DOCS_LHR VALUES (2,'the second doc');
4INSERT INTO XT_DOCS_LHR VALUES (3,'the third doc');
5COMMIT;
建立索引,指定INDEXTYPE爲CTXSYS.CONTEXT:學習
1LHR@orclasm > CREATE INDEX DOC_INDEX_LHR ON XT_DOCS_LHR(TEXT) INDEXTYPE IS CTXSYS.CONTEXT;
2Index created.
3LHR@orclasm > SELECT * FROM XT_DOCS_LHR WHERE CONTAINS(TEXT, 'first') > 0;
4 ID TEXT
5---------- -----------------------
6 1 the first doc
7Execution Plan
8----------------------------------------------------------
9Plan hash value: 4244292504
10---------------------------------------------------------------------------------------------
11| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
12---------------------------------------------------------------------------------------------
13| 0 | SELECT STATEMENT | | 1 | 67 | 4 (0)| 00:00:01 |
14| 1 | TABLE ACCESS BY INDEX ROWID| XT_DOCS_LHR | 1 | 67 | 4 (0)| 00:00:01 |
15|* 2 | DOMAIN INDEX | DOC_INDEX_LHR | | | 4 (0)| 00:00:01 |
16---------------------------------------------------------------------------------------------
17Predicate Information (identified by operation id):
18---------------------------------------------------
19 2 - access("CTXSYS"."CONTAINS"("TEXT",'first')>0)
20Note
21-----
22 - dynamic sampling used for this statement (level=2)
23Statistics
24----------------------------------------------------------
25 137 recursive calls
26 0 db block gets
27 386 consistent gets
28 0 physical reads
29 0 redo size
30 604 bytes sent via SQL*Net to client
31 519 bytes received via SQL*Net from client
32 2 SQL*Net roundtrips to/from client
33 0 sorts (memory)
34 0 sorts (disk)
35 1 rows processed
36LHR@orclasm > SELECT D.INDEX_NAME, D.INDEX_TYPE, D.ITYP_OWNER, D.ITYP_NAME,D.DOMIDX_STATUS
37 2 FROM DBA_INDEXES D
38 3 WHERE D.INDEX_NAME LIKE 'DOC_INDEX_LHR%';
39INDEX_NAME INDEX_TYPE ITYP_OWNER ITYP_NAME DOMIDX_STATU
40----------------- ------------- ------------- ------------ ------------
41DOC_INDEX_LHR DOMAIN CTXSYS CONTEXT VALID
能夠看到查詢中使用到了全文索引。固然,Oracle的全文索引遠比這個例子複雜,想深刻學習Oracle全文索引的讀者能夠參考Oracle官方文檔。this
& 說明:
有關全文索引的更多內容能夠參考個人BLOG:http://blog.itpub.net/26736162/viewspace-2139034/
本文選自《Oracle程序員面試筆試寶典》,做者:李華榮。
詳細內容能夠添加麥老師微信或QQ私聊。
● 本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用
● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於做者的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解
● 版權全部,歡迎分享本文,轉載請保留出處
● QQ:646634621 QQ羣:618766405
● 提供OCP、OCM和高可用部分最實用的技能培訓
● 題目解答如有不當之處,還望各位朋友批評指正,共同進步
長按下圖識別二維碼或微信掃描下圖二維碼來關注小麥苗的微信公衆號:xiaomaimiaolhr,學習最實用的數據庫技術。
喜歡就點擊「好看」吧
本文分享自微信公衆號 - DB寶(lhrdba)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。