在做oracle数据库调优的很多情况下,都可以通过增加索引来提高数据库的性能,但是有些情况下dba也是无能为力的,因为该有的索引都
前言、在做oracle数据库调优的很多情况下,都可以通过增加索引来提高数据库的性能,,但是有些情况下dba也是无能为力的,因为该有的索引都已经创建了,但是由于开发人员所写的sql语句的问题导致不能走索引,那么这种情况下就需要修改语句来;
测试环境的说明:
由oracle索引来理解arcsde索引
oracle索引技术之如何建立最佳索引
oracle索引列null值引发执行计划该表的测试示例
oracle索引 主键影响查询速度
oracle索引扫描
情况一、to_char和to_date的使用
以下两条语句实现的功能都是一样的,但是两条的执行计划是不一样的,有一条会走索引,还有一条不走索引:
select count(*) from john where lastruntime>to_date('2014-03-05 11:00:00','yyyy-mm-dd hh24:mi:ss');
select count(*) from john where to_char(lastruntime,'yyyy/mm/dd hh24:mi:ss')>'2014-03-05 11:00:00';
原因:john_time索引记录的是data的值,而不是to_char后的值,所以语句一会走索引,语句二走全表扫描;
情况二、在条件中使用表达式
select count(*) from john where lastruntime>sysdate-100;
select count(*) from john where lastruntime-100>sysdate;
原因:john_time索引记录的是data的值,而不是data-100后的值;
总结:1、不要轻易在字段前增加函授;
2、尽量不要将字段嵌入到表达式中;
总而言之:就是有索引的那列不能进行任何的相关操作,单独的放在等式的一边;
本文永久更新链接地址:
