强制索引的应用

在某保险公司的业务系统项目中存在一种非常让人头疼的问题,那就是查询条件的模糊。都知道像 where a like 'aaa%'的形式是可以利用到数据表中a字段的索引的,但是如果模糊的条件变作where a like '%aaa%'此时索引将不起作用了,经过生产环境反应的情况,这种条件查询的数据返回时间大于8秒,这在业务处理系统中是致命的效率底下,因此就想到是否可以使用数据库的强制索引来解决这种SQL的查询效率低下问题。

 

经验证在oracle中在前%的查询条件中即使使用强制索引也无法提供查询效率,就是没有真正使用到索引检索。

 

在informix中前%得模糊查询在启用强制索引之下测试结果让人欣慰,结果是其使用了索引查询,效率由原8秒缩减到2秒不到,具体测试过程:

 

1.配置数据库参数
  在配置文件中加入配置参数:EXT_DIRECTIVES 2
  注:配置文件目录:/informix/etc/onconfig.sc,配置完成后重新启动数据库。
 
2.创建外部伪指令,在数据库中执行以下语句:
  save external directives {+AVOID_FULL(this_)} active for select count(*) as y0_ from T_C_VEHICLE_MSG ****  
  save external directives {+AVOID_FULL(this_)} active for select count(*) as y0_ from T_C_VEHICLE_MSG this_ where this_.SEARCH_CODE like ?;
  save external directives {+AVOID_FULL(this_)} active for select first 10 this_.VEHICLE_ID a**;

 

OK下一步就要验证能否不适用伪指令在程序中调整HQL来完成效率优化了

 

 

INFORMIX扩展伪指令

数据库版本11.50

 

在SQL执行过程中,会遇到执行计划和我们预先设计的不一致的情况,而且Informix无法将其自动优化,这时就要使用伪指令将索引强制使用。

扩展伪指令允许把伪指令定义在数据库服务器中,而不需要在每个SQL中写入了。

 

一、配置参数&环境变量

默认情况下EXT_DIRECTIVES=0,扩展伪指令在任何情况下都不生效。

更改EXT_DIRECTIVES需要重新启动数据库才能生效。

当EXT_DIRECTIVES=1,同时需要配置环境变量IFX_EXTDIRECTIVES=1,扩展伪指令才能生效;

当EXT_DIRECTIVES=2,不需要配置环境变量IFX_EXTDIRECTIVES伪指令就可生效。

 

二、创建外部伪指令

save external directives {+伪指令} active for select语句;

 

创建后外部伪指令信息存储在sysdirectives表中。

不需要伪指令时,可直接把对应的行从这个表中删除即可。

 

在使用外部伪指令时,SQL语句的格式应与创建伪指令时的格式保持一致。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值