Oracle不走索引hint,oracle不走hint原因1:依据hint会出现错误结果
比如根据索引取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会出现错误结果相关推荐
- oracle怎么么创建索引,Oracle 创建索引,oracle索引怎么创建
Oracle 创建索引,oracle索引怎么创建 索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索 时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到 真实的数据内 ...
- mysql count 不走索引_sql中不走索引情况
where 用到的字段没创建索引,就不走索引. 下面这三种情况也会走索引. where field1 like '%abc%' --like % where substr(field1,1)='a' ...
- Oracle创建索引bitmap,Oracle编程高手箴言:位图索引(Bitmap Index)的故事
Oracle编程高手箴言:位图索引(Bitmap Index)的故事 您如果熟悉Oracle数据库,我想您对Thomas Kyte的大名一定不会陌生.Tomas主持的asktom.oracle.com ...
- 用oracle建立索引步骤,Oracle建立全文索引的步骤
Oracle全文索引相信大家都有一定的了解,下面就教您如何建立oracle全文索引,如果您对oracle全文索引方面感兴趣的话,不妨一看. 步骤一 检查和设置数据库角色 首先检查数据库中是否有CTXS ...
- oracle 检查索引失效,oracle 索引失效原因_汇总
1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上. 4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索引列进 ...
- oracle 查询索引个数,Oracle数据库索引的创建和查询
索引命名规范:普通索引最好i_开头,唯一索引最好u_开头,primary key索引最好pk_开头 1.创建索引:create index 索引名 on 表名(字段名); 2.查询索引 oracle中 ...
- oracle 清理索引空间,Oracle删除索引规范
1.背景概述 近期应用升级上线过程中,存在删除业务表索引的变更操作,且因删除索引导致次日业务高峰时期,数据库响应缓慢的情况,经定位是缺失索引导致.与用户沟通,虽然变更中删除索引的需求很少,但也存在此类 ...
- oracle松散索引扫描,oracle跳跃式索引扫描测试
Oracle 中我们知道能够使用跳跃式索引扫描(Index Skip Scan).然而,能利用跳跃式索引扫描的情况其实是有些限制的CREATE TABLE test AS SELECT ROWNUM ...
- oracle创建索引表,Oracle 大表创建索引
Oracle 大表创建索引 祖仙教小凡仙 海鲨数据库架构师 有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (en ...
最新文章
- CSS3 Box-shadow 阴影效果用法
- Android 自定义动画 LoadingView
- Libra教程之:Transaction的生命周期
- 20210912模拟
- 什么是执行落地岗位_激发产品业务价值,用数据驱动理念落地
- oracle open_link,open_links_per_instance 和 open_links 参数说明
- Flutter进阶—质感设计之标签栏
- lnmp+lamp编译后,编译参数查看
- HDU1201 18岁生日【日期计算+水题】
- subsequence java_Java StringBuilder subSequence()方法与示例
- orm框架有哪些_.net core 基于Dapper 的分库分表开源框架(coredata)
- 软件开发 外包_软件开发外包:选择它的理由
- 世界上最畅销的JSON和XML编辑器-Altova XMLSpy 2021版发布,升级版JSON Grid View归来!
- javascript案例32——中文简繁体转换
- 怎么修改数据库服务器名字,sql改数据库名称
- [C++STL] Priority Queue 介绍及源码分析
- 华为PPPoE、PPP/MP、IP-Trunk配置
- [NOIP 2018]龙虎斗 题解(Python)
- 由键盘输出三个整数分别存入变量num1,num2,num3,进行排序从小到大输出
- word中删除多余的空白页
热门文章
- 程序员的工资大概多少?
- YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
- Vue3+Quasar实现ins风格图片墙
- 天池大赛--ICPR Text Detection总结
- BRISK特征提取算法 .
- linux kernel debug 之 CallTrace
- java代码审计_Java代码审计入门篇
- 【物联网专题】2.2_设备管理平台_什么是物模型?
- R reticulate 设置 python 环境
- IDEA的maven的package打包