知识大全 讲解Oracle数据库的全文索引设置步骤

Posted 索引

篇首语:赋料扬雄敌,诗看子建亲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 讲解Oracle数据库的全文索引设置步骤相关的知识,希望对你有一定的参考价值。

讲解Oracle数据库的全文索引设置步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle在执行一个SQL之前 首先要分析一下语句的执行计划 然后再按执行计划去执行 分析语句的执行计划的工作是由优化器(Optimizer)来完成的 不同的情况 一条SQL可能有多种执行计划 但在某一时点 一定只有一种执行计划是最优的 花费时间是最少的 相信你一定会用Pl/sql Developer Toad等工具去看一个语句的执行计划 不过你可能对Rule Choose First rows All rows这几项有疑问 因为我当初也是这样的 那时我也疑惑为什么选了以上的不同的项 执行计划就变了?

   优化器的优化方式

  

  Oracle的优化器共有两种的优化方式 即基于规则的优化方式(Rule Based Optimization 简称为RBO)和基于代价的优化方式(Cost Based Optimization 简称为CBO)

  

  A RBO方式 优化器在分析SQL语句时 所遵循的是Oracle内部预定的一些规则 比如我们常见的 当一个where子句中的一列有索引时去走索引

  

  B CBO方式 依词义可知 它是看语句的代价(Cost)了 这里的代价主要指Cpu和内存 优化器在判断是否用这种方式时 主要参照的是表及索引的统计信息 统计信息给出表的大小 有少行 每行的长度等信息 这些统计信息起初在库内是没有的 是你在做analyze后才出现的 很多的时侯过期统计信息会令优化器做出一个错误的执行计划 因些我们应及时更新这些信息 在Oracle 及以后的版本 Oracle列推荐用CBO的方式

  

  我们要明了 不一定走索引就是优的 比如一个表只有两行数据 一次IO就可以完成全表的检索 而此时走索引时则需要两次IO 这时对这个表做全表扫描(full table scan)是最好的

  

   优化器的优化模式(Optermizer Mode)

  

  优化模式包括Rule Choose First rows All rows这四种方式 也就是我们以上所提及的 如下我解释一下

  

  Rule:不用多说 即走基于规则的方式

  

  Choolse:这是我们应观注的 默认的情况下Oracle用的便是这种方式 指的是当一个表或或索引有统计信息 则走CBO的方式 如果表或索引没统计信息 表又不是特别的小 而且相应的列有索引时 那么就走索引 走RBO的方式

  

  First Rows:它与Choose方式是类似的 所不同的是当一个表有统计信息时 它将是以最快的方式返回查询的最先的几行 从总体上减少了响应时间

  

  All Rows:也就是我们所说的Cost的方式 当一个表有统计信息时 它将以最快的方式返回表的所有的行 从总体上提高查询的吞吐量 没有统计信息则走基于规则的方式

  

   如何设定选用哪种优化模式

  ◆A Instance级别

  

  我们可以通过在init ora文件中设定OPTIMIZER_MODE=RULE OPTIMIZER_MODE=CHOOSE OPTIMIZER_MODE=FIRST_ROWS OPTIMIZER_MODE=ALL_ROWS去选用 所提的四种方式 如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式

  

  ◆B Sessions级别

  

  通过SQL> ALTER SESSION SET OPTIMIZER_MODE= ;来设定

  

  ◆C 语句级别

  

  这些需要用到Hint 比如:

>  

  

  

  这个listener还没有配置extproc 因此 需要为它增加对extproc的监听 办法就是分别增加description 和 sid_desc 修改后的listner ora 如下

  LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = MYDATABASE)(PORT = )) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = mydatabase world) (ORACLE_HOME = /u /app/oracle/product/ ) (SID_NAME = mydatabase) ) (SID_DESC = (PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = /u /app/oracle/product/ ) ) )

  

  

  

  

  

  注意上面的host global_dbname sid_name oracle_home应填写你的数据库的实际值 但program一项必须填写extproc

  

  

  

   设置tnsnames ora

  

  其次 要配置服务器端的tnsnames ora文件 该文件的位置在$ORACLE_HOME/neork/admin下面 同样可以通过运行netasst来进行配置

  

  在tnsnames ora文件中需要增加如下一项

  

>

  注意其中 KEY 和SID必须与listener ora中的key 和sid_name对应相同

  

  三.设置词法分析器(lexer)

  Oracle 缺省使用basic_lexer这个分析器 basic_lexer针对英语 要指定使用中文分析器 操作步骤

  

   . 用ctxsys用户登陆intermedia text manager 口令ctxsys:

  

  

   .选择首选项——〉语言指示器——〉创建 输入指示器的名字如chinese_lexer 选择lexer下的chinese_vgrnm_lexer

  

  

   .建立intermedia索引 指定索引名 选择方案和表下的字段 例如system方案下的DOM_ _DOCLIB中的CURRENTTEXT字段 首选项中选择chinese_lexer

  

  这样建立的全文检索索引 就会使用chinese_vgram_lexer作为分析器

  

  

   .在索引建好后 在该用户下查到Oracle自动产生了以下几个表 可以使用dba studio查看 (假设索引名为myindex)

  

  DR$myindex$I DR$myindex$K DR$myindex$R DR$myindex$N

  

  其中以I表最重要 查询该表

  

  select token_text token_count from DR$I_RSK $I where rownum<= ;

  

  可以看到该表中保存的是Oracle分析你的文档后 生成的term记录 包括term出现的位置 次数 hash值等

  

  

  四.使用job定时同步和优化

  在intermedia索引建好后 如果表中的数据发生变化 增加或修改了记录 由于对表所发生的任何dml语句 都不会自动修改索引 因此 必须定时同步(sync)和优化(optimize)索引 以正确反映数据的变化

  

  

  同步(sync):将新的term 保存到I表

  

  优化(optimize):清除I表的垃圾 主要是将已经被删除的term从I表删除

  

  

  Oracle提供了一个ctx server来做这个同步和优化的工作 只需要在后台运行这个进程 它会监视数据的变化 及时进行同步 但存在许多问题 可以用下的两个job来完成(该job要建在和表同一个用户下)

  

>

  注释 第一个job的SYSDATE + ( / / )是指每隔 分钟同步一次 第二个job的SYSDATE + 是每隔 天做一次全优化 至于具体的时间间隔 大家可以根据各自的应用需要来灵活应用

cha138/Article/program/Oracle/201311/18793

相关参考

知识大全 讲解jython访问Oracle数据库的具体步骤

讲解jython访问Oracle数据库的具体步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Oracle全文索引的STORAGE属性使用介绍

Oracle全文索引的STORAGE属性使用介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 一个完整的SQL SERVER数据库全文索引的示例介绍

一个完整的SQLSERVER数据库全文索引的示例介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 讲解MySQL索引的概念及数据库索引的应用[1]

数据库基础:讲解MySQL索引的概念及数据库索引的应用[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 讲解MySQL索引的概念及数据库索引的应用[2]

数据库基础:讲解MySQL索引的概念及数据库索引的应用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 索引存储关系到数据库的运行效率

  在Oracle数据库中数据库管理员不仅在索引的选择上要花费一定的精力而且在索引的存储上也有所讲究因为索引与表一样不仅需要在数据字典中保存索引的定义还需要在表空间中为他分配实际的存储空间并为其设置存

知识大全 oracle数据库如何重建索引

  当索引的碎片过多时会影响执行查询的速度从而影响到我们的工作效率这时候采取的最有利的措施莫过于重建索引了本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程接下来我们就开始介绍这一过程  

知识大全 在Unix服务器上设置Oracle全文检索

在Unix服务器上设置Oracle全文检索  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于工

知识大全 Oracle数据库强制索引

Oracle数据库强制索引  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当where子句对某一

知识大全 Oracle数据库中索引的维护

Oracle数据库中索引的维护  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文只讨论Orac