Oracle查询语句中指定索引时优化器及指定索引不好使的处理方法
2012-12-02 21:53
351 查看
Oralce多表联合查询时,Oracle优化器会选择相应的索引以提高性能。一些情况下,Oracle优化器不能选择正确的索引,此时可以通过查询语句指定特定的索引以提高性能。
例:有两个表A和B 要进行联合查询 A表有索引 IDX_A1_A2 ,A表和B表的关联条件是A.ID=B.ID
通常的SQL查询是 select A.c1,A,c2,B.c3,B.c4 from A,B where A.ID=B.ID 但是数据量在的时候感觉很慢,建立的索引起作用,需要手动指定一下.
加指定索引的语法是: /*+ index(表名,索引名) */
例如:
select /*+ index(A,IDX_A1_A2 ) */ A.c1,A,c2,B.c3,B.c4 from A,B where A.ID=B.ID 如果表有重命名,表名要输入重命名的表名.
例如:
select /*+ index( t ,IDX_A1_A2 ) */ t.c1,t,c2,B.c3,B.c4 from A t,B where t.ID=B.ID
但某些特殊情况下,即便使用上述方式在SQL查询语句中指定要使用使用的索引,Oracle仍可能固执的使用它认为正确的索引,
如何让Oracle放弃它自认为正确的索引而改用指定的索引呢:
仍以前面例子为例,查询条件中“ A.ID=B.ID”,若ID为A表的主键、B表的外键,Oracle很有可能优先使用些唯一性索引,而放弃A表上的其他索引,
若想让Oracle放弃使用此唯一性索引,可以将查询条件改为“A.ID||'a'= B.ID||'a',A.ID后加了“ || 'a'”后A表上的唯一性索引即会失效,
Oracle近尔会使用A1表上的其他索引:
例:select /*+ index( t ,IDX_A1_A2 ) */ t.c1,t,c2,B.c3,B.c4 from A t,B where t.ID||'a'=B.ID||'a'
在A.ID后加“ || 'a'”只是让Oracle放弃索引的一种方法,导致Oracle不使用索引的情况有很多,都可以拿来达到这个目的。
例:有两个表A和B 要进行联合查询 A表有索引 IDX_A1_A2 ,A表和B表的关联条件是A.ID=B.ID
通常的SQL查询是 select A.c1,A,c2,B.c3,B.c4 from A,B where A.ID=B.ID 但是数据量在的时候感觉很慢,建立的索引起作用,需要手动指定一下.
加指定索引的语法是: /*+ index(表名,索引名) */
例如:
select /*+ index(A,IDX_A1_A2 ) */ A.c1,A,c2,B.c3,B.c4 from A,B where A.ID=B.ID 如果表有重命名,表名要输入重命名的表名.
例如:
select /*+ index( t ,IDX_A1_A2 ) */ t.c1,t,c2,B.c3,B.c4 from A t,B where t.ID=B.ID
但某些特殊情况下,即便使用上述方式在SQL查询语句中指定要使用使用的索引,Oracle仍可能固执的使用它认为正确的索引,
如何让Oracle放弃它自认为正确的索引而改用指定的索引呢:
仍以前面例子为例,查询条件中“ A.ID=B.ID”,若ID为A表的主键、B表的外键,Oracle很有可能优先使用些唯一性索引,而放弃A表上的其他索引,
若想让Oracle放弃使用此唯一性索引,可以将查询条件改为“A.ID||'a'= B.ID||'a',A.ID后加了“ || 'a'”后A表上的唯一性索引即会失效,
Oracle近尔会使用A1表上的其他索引:
例:select /*+ index( t ,IDX_A1_A2 ) */ t.c1,t,c2,B.c3,B.c4 from A t,B where t.ID||'a'=B.ID||'a'
在A.ID后加“ || 'a'”只是让Oracle放弃索引的一种方法,导致Oracle不使用索引的情况有很多,都可以拿来达到这个目的。
相关文章推荐
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- SQL查询语句优化的实用方法
- mysql处理海量数据时的一些优化查询速度方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- Oracle查询指定索引提高查询效率
- Oracle查询死锁及处理方法
- mysql优化sql语句查询的方法(一)
- mysql处理海量数据时的一些优化查询速度方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 30种mysql优化sql语句查询的方法<转>
- Mysql 中优化 SQL 语句查询的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 解析Oracle数据扫描 Oracle SQL查询优化 引导局部范围数据扫描的方法(4)
- 程序里的SQL、mybatis下的查询慢的优化方法(非SQL语句优化):
- Oracle性能优化,组合索引查询
- 浅谈MySQL中优化sql语句查询常用的30种方法
- Mysql处理海量数据时的一些优化查询速度方法
- Mysql常用30种SQL查询语句优化方法
- 浅谈MySQL中优化sql语句查询常用的30种方法