比如根据索引取count(*),如果该列没有规定是非null的,那么根据索引取行数就会出现错误结果。

如下:

1 创建一张包含null的表test,并在上面创建索引

SQL> create table test (a varchar2(10));

Table created.

SQL> insert into test values ('a');

1 row created.

SQL>   insert into test values ('b');

1 row created.

SQL>   insert into test values (null);

1 row created.

SQL>   insert into test values ('d');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test;

A

----------

a

b

d

SQL> create index ind_t on test(a);

Index created.

2 查看执行计划,并添加hint后对比。

可以看到,默认情况下,走的是全表,然后指定hint /*+index(test,ind_t)  */让查询走索引,但是没有用。

改造sql,加上条件where a is not null,然后查看,发现走了索引。

因为index不能存储空值,所以如果没有帅选条件直接走索引,获取的值是空值,这样结果就是有问题的。

SQL> set autot on

SQL> select count(*) from test;

COUNT(*)

----------

4

Execution Plan

----------------------------------------------------------

Plan hash value: 1950795681

-------------------------------------------------------------------

| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |

-------------------------------------------------------------------

|   0 | SELECT STATEMENT   |      |     1 |     2   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |      |     1 |            |          |

|   2 |   TABLE ACCESS FULL| TEST |     4 |     2   (0)| 00:00:01 |

-------------------------------------------------------------------

Note

-----

- dynamic statistics used: dynamic sampling (level=2)

Statistics

----------------------------------------------------------

5  recursive calls

0  db block gets

8  consistent gets

0  physical reads

0  redo size

550  bytes sent via SQL*Net to client

387  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

SQL> l

1* select count(*) from test

SQL> select /*+index(test,ind_t)  */count(*) from test

2  ;

COUNT(*)

----------

4

Execution Plan

----------------------------------------------------------

Plan hash value: 1950795681

-------------------------------------------------------------------

| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |

-------------------------------------------------------------------

|   0 | SELECT STATEMENT   |      |     1 |     2   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |      |     1 |            |          |

|   2 |   TABLE ACCESS FULL| TEST |     4 |     2   (0)| 00:00:01 |

-------------------------------------------------------------------

Hint Report (identified by operation id / Query Block Name / Object Alias):

Total hints for statement: 1 (U - Unused (1))

---------------------------------------------------------------------------

2 -  SEL$1 / TEST@SEL$1

U -  index(test,ind_t)

Note

-----

- dynamic statistics used: dynamic sampling (level=2)

Statistics

----------------------------------------------------------

4  recursive calls

0  db block gets

8  consistent gets

0  physical reads

0  redo size

550  bytes sent via SQL*Net to client

412  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

SQL> select /*+index(test,ind_t)  */count(*) from test where a is not null;

COUNT(*)

----------

3

Execution Plan

----------------------------------------------------------

Plan hash value: 938330370

--------------------------------------------------------------------------

| Id  | Operation        | Name  | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT |       |     1 |     7 |     1   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE  |       |     1 |     7 |            |          |

|*  2 |   INDEX FULL SCAN| IND_T |     3 |    21 |     1   (0)| 00:00:01 |

--------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - filter("A" IS NOT NULL)

Note

-----

- dynamic statistics used: dynamic sampling (level=2)

Statistics

----------------------------------------------------------

5  recursive calls

0  db block gets

6  consistent gets

0  physical reads

0  redo size

550  bytes sent via SQL*Net to client

431  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

Oracle不走索引hint,oracle不走hint原因1:依据hint会出现错误结果相关推荐

  1. oracle怎么么创建索引,Oracle 创建索引,oracle索引怎么创建

    Oracle 创建索引,oracle索引怎么创建 索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索 时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到 真实的数据内 ...

  2. mysql count 不走索引_sql中不走索引情况

    where 用到的字段没创建索引,就不走索引. 下面这三种情况也会走索引. where field1 like '%abc%' --like % where substr(field1,1)='a' ...

  3. Oracle创建索引bitmap,Oracle编程高手箴言:位图索引(Bitmap Index)的故事

    Oracle编程高手箴言:位图索引(Bitmap Index)的故事 您如果熟悉Oracle数据库,我想您对Thomas Kyte的大名一定不会陌生.Tomas主持的asktom.oracle.com ...

  4. 用oracle建立索引步骤,Oracle建立全文索引的步骤

    Oracle全文索引相信大家都有一定的了解,下面就教您如何建立oracle全文索引,如果您对oracle全文索引方面感兴趣的话,不妨一看. 步骤一 检查和设置数据库角色 首先检查数据库中是否有CTXS ...

  5. oracle 检查索引失效,oracle 索引失效原因_汇总

    1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上. 4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索引列进 ...

  6. oracle 查询索引个数,Oracle数据库索引的创建和查询

    索引命名规范:普通索引最好i_开头,唯一索引最好u_开头,primary key索引最好pk_开头 1.创建索引:create index 索引名 on 表名(字段名); 2.查询索引 oracle中 ...

  7. oracle 清理索引空间,Oracle删除索引规范

    1.背景概述 近期应用升级上线过程中,存在删除业务表索引的变更操作,且因删除索引导致次日业务高峰时期,数据库响应缓慢的情况,经定位是缺失索引导致.与用户沟通,虽然变更中删除索引的需求很少,但也存在此类 ...

  8. oracle松散索引扫描,oracle跳跃式索引扫描测试

    Oracle 中我们知道能够使用跳跃式索引扫描(Index Skip Scan).然而,能利用跳跃式索引扫描的情况其实是有些限制的CREATE TABLE test AS SELECT ROWNUM ...

  9. oracle创建索引表,Oracle 大表创建索引

    Oracle 大表创建索引 祖仙教小凡仙 海鲨数据库架构师 有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (en ...

最新文章

  1. CSS3 Box-shadow 阴影效果用法
  2. Android 自定义动画 LoadingView
  3. Libra教程之:Transaction的生命周期
  4. 20210912模拟
  5. 什么是执行落地岗位_激发产品业务价值,用数据驱动理念落地
  6. oracle open_link,open_links_per_instance 和 open_links 参数说明
  7. Flutter进阶—质感设计之标签栏
  8. lnmp+lamp编译后,编译参数查看
  9. HDU1201 18岁生日【日期计算+水题】
  10. subsequence java_Java StringBuilder subSequence()方法与示例
  11. orm框架有哪些_.net core 基于Dapper 的分库分表开源框架(coredata)
  12. 软件开发 外包_软件开发外包:选择它的理由
  13. 世界上最畅销的JSON和XML编辑器-Altova XMLSpy 2021版发布,升级版JSON Grid View归来!
  14. javascript案例32——中文简繁体转换
  15. 怎么修改数据库服务器名字,sql改数据库名称
  16. [C++STL] Priority Queue 介绍及源码分析
  17. 华为PPPoE、PPP/MP、IP-Trunk配置
  18. [NOIP 2018]龙虎斗 题解(Python)
  19. 由键盘输出三个整数分别存入变量num1,num2,num3,进行排序从小到大输出
  20. word中删除多余的空白页

热门文章

  1. 程序员的工资大概多少?
  2. YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
  3. Vue3+Quasar实现ins风格图片墙
  4. 天池大赛--ICPR Text Detection总结
  5. BRISK特征提取算法 .
  6. linux kernel debug 之 CallTrace
  7. java代码审计_Java代码审计入门篇
  8. 【物联网专题】2.2_设备管理平台_什么是物模型?
  9. R reticulate 设置 python 环境
  10. IDEA的maven的package打包