
正文
oracle查询有时走索引有时不走索引,oracle走索引查询慢
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
oracle11g单表查询不走索引问题
1、在为status 这个字段不重复的值太少。这个字段其实不适合建索引。oracle11g用的优化器是cbo 也是就基于代价的优化器,第一种情况oracle认为全表扫描更快些,所以就没用索引。执行之前你可以看一下执行计划。
2、) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上。
3、建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEX SKIP SCAN概念。在包含有null值的table列上建立索引。在索引列上使用函数时不会使用索引。
相关问答
Q1: Oracle中不使用索引的几种情况分析
1、) 提示不使用索引 8) 统计数据不真实 9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。
2、在包含有null值的table列上建立索引。在索引列上使用函数时不会使用索引。
3、位图索引对于列的可选择值很少时使用,比如性别列,只有男,女,不知道等少量可选值,使用位图索引会比普通索引快很多。
Q2: oracle索引什么时候失效
当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。索引失效,可以考虑重建索引,rebuild online。
mysql使用不等于(!= 或者)的时候,无法使用索引,会导致索引失效。mysql中使用is not null 或者 is null会导致无法使用索引。mysql中like查询是以%开头,索引会失效变成全表扫描,覆盖索引。
先确定是否是索引失效,SQL语句是否用到了索引。把索引的字段放到where条件的第一个。大部分都是SQL语句没用到索引,误以为是索引失效。全表查询时不会用到索引的。
看 user_indexes 的 status 字段, 如果不是 valid, 索引失效。ORACLE会使索引失效的原因 没有 WHERE 子句。使用 IS NULL 和 IS NOT NULL。
这个是正常的,使用函数就不走索引了,如果你都是这样查的,可以在索引里加上函数。
oracle查询有时走索引有时不走索引的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle走索引查询慢、oracle查询有时走索引有时不走索引的信息别忘了在本站进行查找喔。







