比如根据索引取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原因1:依据hint会出现错误结果
来源:这里教程网
时间:2026-03-03 16:10:18
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 三星显示 MWC 进行高尔夫推杆、篮球投篮测试,展示可折叠 OLED 耐用性
- 云原生冷知识大挑战,答对一半算你赢!
云原生冷知识大挑战,答对一半算你赢!
26-03-03 - 19c 增加mgmt
19c 增加mgmt
26-03-03 - 互联网短视频平台,
互联网短视频平台,
26-03-03 - TrendForce:2025Q4 五大 NAND 闪存原厂相关营收环比增长 23.8%
- BI Publisher(rtf)模板开发语法大全
BI Publisher(rtf)模板开发语法大全
26-03-03 - 批量复制新浪微博相册图片及视频,你都是怎么操作的呢?
批量复制新浪微博相册图片及视频,你都是怎么操作的呢?
26-03-03 - 一句话一张图概括群控
一句话一张图概括群控
26-03-03 - Oracle DBLink bug引发的故障(Session Hang Memory leak)
- Docker宣布“禁用“,打破封锁限制关键还是要靠国产自主可控硬核技术!
Docker宣布“禁用“,打破封锁限制关键还是要靠国产自主可控硬核技术!
26-03-03
