Oracle优化你的查询--关于避免索引隐式失效
2010-11-29 09:52
435 查看
说明了Oracle数据库中的索引隐式失效的问题
1、隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.
由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.
错误的例子:select * from test where tu_mdn=13333333333;
正确的例子:select * from
test where tu_mdn='13333333333';
2、对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
错误的例子:select * from test
where id-1=9;
正确的例子:select * from test where id=10;
3、使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
错误的例子:select * from test
where round(id)=10; 说明,此时id的索引已经不起作用了
正确的例子:首先建立函数索引,create index
test_id_fbi_idx on test(round(id));
然后 select * from
test where round(id)=10; 这时函数索引起作用了
1、隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.
由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.
错误的例子:select * from test where tu_mdn=13333333333;
正确的例子:select * from
test where tu_mdn='13333333333';
2、对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
错误的例子:select * from test
where id-1=9;
正确的例子:select * from test where id=10;
3、使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
错误的例子:select * from test
where round(id)=10; 说明,此时id的索引已经不起作用了
正确的例子:首先建立函数索引,create index
test_id_fbi_idx on test(round(id));
然后 select * from
test where round(id)=10; 这时函数索引起作用了
相关文章推荐
- 避免在sql的where中对字段进行转换(函数转换/操作符转换/隐式转换)------索引会失效从而导致慢查询
- 关于mysql 使用or连接索引失效引起的慢查询优化的初步实践
- SQL优化避免索引失效
- SQL优化避免索引失效
- 关于mysql order by 的select查询的索引创建和优化
- 四、优化数据库,将不同功能的表分别建立在不同的库中,尽量避免表的联合查询,重视索引
- SQL优化避免索引失效
- oracle优化关于索引的
- 关于mysql的索引原理与慢查询优化
- Oracle中查询时候使index索引失效的限制条件
- oracle 性能优化操作七:索引提高数据分布不均匀时查询效率
- Oracle查询隐式类型转换不走索引
- SQL优化避免索引失效
- 关于oracle的多表查询优化
- oracle数据查找方式以及索引的分类和索引失效的情况-------帮助了解索引从而优化我们oracle数据库
- Oracle笔记第二篇----索引及查询性能优化
- Oracle查询语句中指定索引时优化器及指定索引不好使的处理方法
- 关于 Oracle 分区索引的失效和重建
- 关于oracle 与 mysql 的索引与隐式转换的总结
- 数据库查询性能优化(合理使用索引|避免或简化排序|避免对大型表进行全表顺序扫描|避免使用相关的子查询|避免使用通配符匹配 )