ITPub博客

首页 > 数据库 > Oracle > kk系统索引的问题

kk系统索引的问题

原创 Oracle 作者:tonglei2000 时间:2015-10-12 11:22:51 0 删除 编辑
sjz和zjk的kk系统现在数据越来越多,查询显得有些慢,以前优化过,效果不是特别明显。主要是passcar这张表。
这个表已经采用了分区的形式。以gcsj的日期范围,每月一个分区。但是因为一直对分区的很多方面不太理解。创建索引的时候
都是建立的local复合索引,索引的第一列是分区键gcsj,第二列是hphm。在查hphm的时候效率不够。
忽然发现wxs的系统查询数据还是非常快的。查看它的passcar表,一样的分区方式,创建了两个索引,一个是local索引,列是
gcsj,还有一个是global索引,只有一列是hphm。
按照wxs的索引,调整kk系统。在passcar表上共两个索引,一个是local索引,字段是gcsj,一个是global索引,字段也只有hphm一个,不加分区键。索引创建完成后,查询单个月内的数据oracle使用的是hphm的索引,速度飞快。跨月oracle使用的gcsj的local索引,速度还是很慢。对比wxs,跨月查询使用的还是hphm索引,速度飞快。为什么我的系统就不走hphm的索引呢。考虑是oracle优化器自己选择的结果。
我首先想的解决办法是创建global分区索引试试,但是创建的时候要求必须使用分区前缀,即gcsj。这个复合索引我用过,效率很低。既然创建global的分区索引要求分区前缀,我决定创建local索引,但是索引里面只有一列,即hphm。索引顺利创建完成后
,马上测试,查询单个月内的数据速度飞快。跨月oracle使用的gcsj的复合local索引,速度还是很慢。
最后我的判断是oracle优化器版本的原因。kk系统是10.2.0.4.wxs的系统是11.2.0.3.
索引的调整已经没有办法了,我只好强制让oracle走hphm的索引了。网上找了一些资料,又进行了认真测试,正确的写法
select * from passcar
select /*+INDEX(a index_hphm_local)*/ * from passcar a
语法要点:
/*+INDEX(a index_hphm_local)*/ 这里的/*...*/中间不要有空格 ,表名要用别名。
以前认识太肤浅了,以为分区表,创建索引,第一列只有是分区键,才会有效率,所以创建索引的时候一直在这个圈里面转悠。导致索引的效率很低。创建基于hphm的索引,速度提升明显。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13337857/viewspace-1813802/,如需转载,请注明出处,否则将追究法律责任。

下一篇: windows加载驱动
请登录后发表评论 登录
全部评论

注册时间:2010-10-19

  • 博文量
    109
  • 访问量
    215784