• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    初識全文索引

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 15:12:03
    文檔

    初識全文索引

    初識全文索引:通常來說,全文索引大多用在OLAP環(huán)境當中,全文索引擅長于詞匯的快速搜索。 一、全文索引和普通b_tree索引對比 SQL create tablet1 (id int,name varchar(10)); Table created. SQL create indext1_ind on t1(name); In
    推薦度:
    導讀初識全文索引:通常來說,全文索引大多用在OLAP環(huán)境當中,全文索引擅長于詞匯的快速搜索。 一、全文索引和普通b_tree索引對比 SQL create tablet1 (id int,name varchar(10)); Table created. SQL create indext1_ind on t1(name); In

    通常來說,全文索引大多用在OLAP環(huán)境當中,全文索引擅長于詞匯的快速搜索。 一、全文索引和普通b_tree索引對比 SQL create tablet1 (id int,name varchar(10)); Table created. SQL create indext1_ind on t1(name); Index created. SQL create tablet2 as s

    通常來說,全文索引大多用在OLAP環(huán)境當中,全文索引擅長于詞匯的快速搜索。

    一、全文索引和普通b_tree索引對比

    SQL> create tablet1 (id int,name varchar(10));

    Table created.

    SQL> create indext1_ind on t1(name);

    Index created.

    SQL> create tablet2 as select * from t1;

    Table created.

    SQL> create indext2_ind on t2(name) indextype is ctxsys.context;

    Index created.

    SQL> select *from t1 where name like '%tom%';

    ID NAME

    --------------------

    1 tom

    2 tom tom

    2 tom tom

    Execution Plan

    ----------------------------------------------------------

    Plan hash value:3589342044

    --------------------------------------------------------------------------------------

    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

    --------------------------------------------------------------------------------------

    | 0 | SELECT STATEMENT | | 1 | 10 | 2 (0)| 00:00:01 |

    | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 10 | 2 (0)| 00:00:01 |

    |* 2 | INDEX FULL SCAN | T1_IND| 1 | | 1 (0)| 00:00:01 |

    --------------------------------------------------------------------------------------

    PredicateInformation (identified by operation id):

    ---------------------------------------------------

    2 - filter("NAME" LIKE '%tom%' AND"NAME" IS NOT NULL)

    Statistics

    ----------------------------------------------------------

    0 recursive calls

    0 db block gets

    4 consistent gets

    0 physical reads

    0 redo size

    676 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)

    3 rows processed

    SQL> select *from t2 where contains(name,'tom')>0;

    ID NAME

    --------------------

    1 tom

    2 tom tom

    2 tom tom

    Execution Plan

    ----------------------------------------------------------

    Plan hash value:785228215

    --------------------------------------------------------------------------------------

    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

    --------------------------------------------------------------------------------------

    | 0 | SELECT STATEMENT | | 3 | 30 | 7 (0)| 00:00:01 |

    | 1 | TABLE ACCESS BY INDEX ROWID| T2 | 3 | 30 | 7 (0)| 00:00:01 |

    |* 2 | DOMAIN INDEX | T2_IND| | | 1 (0)| 00:00:01 |

    --------------------------------------------------------------------------------------

    PredicateInformation (identified by operation id):

    ---------------------------------------------------

    2 -access("CTXSYS"."CONTAINS"("NAME",'tom')>0)

    Statistics

    ----------------------------------------------------------

    10 recursive calls

    0 db block gets

    14 consistent gets

    0 physical reads

    0 redo size

    676 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)

    3 rows processed

    SQL> selectobject_name,object_type from user_objects order by 1;

    OBJECT_NAME OBJECT_TYPE

    -------------------------------------------------

    --DR開頭的四張表為全文索引的基表

    DR$T2_IND$X INDEX

    DRC$T2_IND$R INDEX

    SYS_IL0000236119C00006$$ INDEX

    SYS_IL0000236124C00002$$ INDEX

    SYS_IOT_TOP_236122 INDEX

    SYS_IOT_TOP_236128 INDEX

    SYS_LOB0000236119C00006$$ LOB

    OBJECT_NAME OBJECT_TYPE

    -------------------------------------------------

    SYS_LOB0000236124C00002$$ LOB

    T1 TABLE

    T1_IND INDEX

    T2 TABLE

    T2_IND INDEX

    二、DML操作對全文索引的影響

    以context方式創(chuàng)建的全文索引并不是基于事務的,默認情況下,即使一個dml操作提交,信息也不會更新到全文索引中。

    1、insert 操作

    SQL> create tablet(name varchar2(30));

    Table created.

    SQL> create indext_ind on t(name) indextype is ctxsys.context;

    Index created.

    SQL> insert intot values('i am an oracle dba');

    1 row created.

    SQL> commit;

    insert數(shù)據(jù)已提交,我們看看全文索引是否已更新

    SQL> setautotrace on

    SQL> select *from t where name like '%dba%';

    NAME

    ------------------------------

    i am an oracle dba

    Execution Plan

    ----------------------------------------------------------

    Plan hash value:1601196873

    --------------------------------------------------------------------------

    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

    --------------------------------------------------------------------------

    | 0 | SELECT STATEMENT | | 1 | 17 | 2 (0)| 00:00:01 |

    |* 1 | TABLE ACCESS FULL| T | 1 | 17 | 2 (0)| 00:00:01 |

    --------------------------------------------------------------------------

    PredicateInformation (identified by operation id):

    ---------------------------------------------------

    1 - filter("NAME" IS NOT NULL AND"NAME" LIKE '%dba%')

    Note

    -----

    - dynamic sampling used for this statement(level=2)

    Statistics

    ----------------------------------------------------------

    5 recursive calls

    0 db block gets

    15 consistent gets

    0 physical reads

    0 redo size

    538 bytes sent via SQL*Net to client

    520 bytes received via SQL*Net from client

    2 SQL*Net roundtrips to/from client

    0 sorts (memory)

    0 sorts (disk)

    1 rows processed

    SQL> set line 200

    SQL> select *from t where contains(name,'dba') >0;

    no rows selected

    Execution Plan

    ----------------------------------------------------------

    Plan hash value:315187259

    -------------------------------------------------------------------------------------

    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

    -------------------------------------------------------------------------------------

    | 0 | SELECT STATEMENT | | 1 | 29 | 4 (0)| 00:00:01 |

    | 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 29 | 4 (0)| 00:00:01 |

    |* 2 | DOMAIN INDEX | T_IND| | | 4 (0)| 00:00:01 |

    -------------------------------------------------------------------------------------

    PredicateInformation (identified by operation id):

    ---------------------------------------------------

    2 -access("CTXSYS"."CONTAINS"("NAME",'dba')>0)

    Note

    -----

    - dynamic sampling used for this statement(level=2)

    Statistics

    ----------------------------------------------------------

    1829 recursive calls

    0 db block gets

    2696 consistent gets

    30 physical reads

    0 redo size

    332 bytes sent via SQL*Net to client

    509 bytes received via SQL*Net from client

    1 SQL*Net roundtrips to/from client

    164 sorts (memory)

    0 sorts (disk)

    0 rows processed

    以上發(fā)現(xiàn),全文索引并沒有自動更新,而是把記錄存放在線面的ctxsys.dr$pending表中。

    SQL> setautotrace off

    SQL> select *from ctxsys.dr$pending;

    PND_CID PND_PID PND_ROWID PND_TIMESTAMP P

    -------------------- ------------------ ------------------ -

    1084 0 AABGmVAAEAAAADmAAA 03-APR-14 N

    SQL> insert intot values('he is an oracle dba');

    1 row created.

    SQL> commit;

    Commit complete.

    SQL> select *from ctxsys.dr$pending;

    PND_CID PND_PID PND_ROWID PND_TIMESTAMP P

    -------------------- ------------------ ------------------ -

    1084 0 AABGmVAAEAAAADmAAA 03-APR-14 N

    1084 0 AABGmVAAEAAAADmAAB 03-APR-14 N

    SQL> select *from t where contains(name,'dba') >0;

    no rows selected

    為了把信息同步到全文索引中,我們需要手工同步:

    SQL> alter indext_ind rebuild parameters ('sync');

    Index altered.

    SQL> select *from t where contains(name,'dba') >0;

    NAME

    ------------------------------

    i am an oracle dba

    he is an oracle dba

    SQL> select *from ctxsys.dr$pending;

    no rows selected

    2、delete操作

    SQL> select *from t;

    NAME

    ------------------------------

    i am an oracle dba

    he is an oracle dba

    SQL> delete fromt where name='he is an oracle dba';

    1 row deleted.

    SQL> select *from t where contains(name,'dba') >0;

    NAME

    ------------------------------

    i am an oracle dba

    SQL> select *from ctxsys.dr$pending;

    no rows selected

    SQL> select *from ctxsys.dr$delete;

    DEL_IDX_IDDEL_IXP_ID DEL_DOCID

    -------------------- ----------

    1084 0 2

    這里我們看到全文索引立即生效了,至于ctxsys.dr$delete里面的數(shù)據(jù)是delete操作的中間狀態(tài),用來維護一個事物,無論事物提交或者回滾。

    SQL> rollback;

    Rollback complete.

    SQL> select *from t where contains(name,'dba') >0;

    NAME

    ------------------------------

    i am an oracle dba

    he is an oracle dba

    SQL> select *from ctxsys.dr$delete;

    no rows selected

    3、update操作

    update操作相當于delete+insert操作,所以默認情況下需要手動刷新全文索引。

    SQL> update t setname='oracle dba' where name='i am an oracle dba';

    1 row updated.

    SQL> select *from ctxsys.dr$delete;

    DEL_IDX_IDDEL_IXP_ID DEL_DOCID

    -------------------- ----------

    1084 0 1

    SQL> select *from ctxsys.dr$pending;

    PND_CID PND_PID PND_ROWID PND_TIMESTAMP P

    -------------------- ------------------ ------------------ -

    1084 0 AABGmVAAEAAAADmAAA 03-APR-14 N

    SQL> select *from t where contains(name,'dba') > 0;

    NAME

    ------------------------------

    he is an oracle dba

    SQL> alter indext_ind rebuild parameters ('sync');

    Index altered.

    SQL> select *from t where contains(name,'dba') > 0;

    NAME

    ------------------------------

    he is an oracle dba

    oracle dba

    由于全文索引創(chuàng)建對象大多是海量數(shù)據(jù)的表,dml操作如果實時更新會影響到系統(tǒng)性能。創(chuàng)建全文索引同步的三個選項:

    manual:默認選項

    every:在一個時間段后更新索引

    on commitdml:在事務提交后更新索引

    語法如下:

    create index t_indon t(name) indextype is ctxsys.context parameters('sync (on commit)');

    查看全文索引信息和性能的工具包ctx_report

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    初識全文索引

    初識全文索引:通常來說,全文索引大多用在OLAP環(huán)境當中,全文索引擅長于詞匯的快速搜索。 一、全文索引和普通b_tree索引對比 SQL create tablet1 (id int,name varchar(10)); Table created. SQL create indext1_ind on t1(name); In
    推薦度:
    標簽: 全文 大多 通常
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品JIZZ在线观看老狼| 国产精品一区二区不卡| 亚洲中文字幕久久精品无码APP| 国产精品高清免费网站| 亚洲午夜国产精品无码老牛影视| 一本色道久久88—综合亚洲精品 | 老司机精品影院91| 久久久久久极精品久久久| 全国精品一区二区在线观看| 99久久精品国内| 国产精品欧美亚洲韩国日本| 人妻少妇精品视频二区| 久久久无码精品亚洲日韩软件| 日韩欧美亚洲国产精品字幕久久久| 日本精品一区二区三区在线视频 | 国产成人精品久久一区二区三区av| 欧美日韩精品一区二区视频| 精品无人区麻豆乱码1区2区| 久久精品无码一区二区日韩AV| 亚洲国产另类久久久精品黑人| 91麻豆精品国产自产在线观看亚洲| 国产精品一区二区久久精品无码| 亚洲欧美日韩精品久久亚洲区| 99久久成人国产精品免费 | 亚洲av无码成人精品区在线播放 | 大桥未久在线精品视频在线| 午夜三级国产精品理论三级| 精品久久久久久99人妻| 66精品综合久久久久久久| 亚洲A∨午夜成人片精品网站| 国产成人精品优优av| 亚洲av日韩av天堂影片精品| 无码AⅤ精品一区二区三区| 欧美精品在线一区二区三区| 亚洲日韩欧美制服精品二区| 免费精品久久久久久中文字幕 | 亚洲综合精品一二三区在线| 国产成人精品视频播放| 成人国产精品999视频| 2022国产精品自产拍在线观看| 欧美精品人爱a欧美精品|