组函数会忽略null值

SQL> select distinct id from abc;

ID


1

2

4

SQL> select count( distinct id ) from abc;

COUNT(DISTINCTID)


3

SQL> select count(id) from abc;

COUNT(ID)


3

SQL> select count(*) from abc;

COUNT(*)


5

SQL> select *from abc;

ID NAME


1 asdf

2 sdfa

sdfa

4 fdas

asdf

SQL>

hint被忽略

如果CBO认为使用hint会导致错误的结果时,hint将被忽略,详见下例SQL> select /*+ index(t t_ind) */ count(*) from t;

Execution Plan


Plan hash value: 2966233522


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


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

| 1 | SORT AGGREGATE | | 1 | | |

| 2 | TABLE ACCESS FULL| T | 50366 | 57 (2)| 00:00:01 |


因为我们是对记录求总数,且我们并没有在建立索引时指定不能为空,索引如果CBO选择在索引上进行count时,但索引字段上的值为空时,结果将不准确,故CBO没有选择索引。 SQL> select /*+ index(t t_ind) */ count(id) from t;

Execution Plan


Plan hash value: 646498162


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


| 0 | SELECT STATEMENT | | 1 | 5 | 285 (1)| 00:00:04 |

| 1 | SORT AGGREGATE | | 1 | 5 | | |

| 2 | INDEX FULL SCAN| T_IND | 50366 | 245K| 285 (1)| 00:00:04 |


因为我们只对id进行count,这个动作相当于count索引上的所有id值,这个操作和对表上的id字段进行count是一样的(组函数会忽略null值)

/*+ INDEX_JOIN(TABLE INDEX_NAME1 INDEX_NAME2) */

当谓词中引用的列都有索引的时候,可以通过指定采用索引关联的方式,来访问数据select /*+ index_join(t t_ind t_bm) */ id from t where id=100 and object_name='EMPLOYEES'

/*+ no_use_nl(table_1,table_2) */在多表关联查询中,指定不使用nest loops方式进行多表关联。

select /*+ no_use_nl(t,t1) */ t.* from t,t1 where t.id=t1.id;

/*+ no_use_hash(table_1,table_2) */在多表关联查询中,指定不使用hash join方式进行多表关联。

select /*+ no_use_hash(t,t1) */ t.* from t,t1 where t.id=t1.id;

/*+ no_use_merge(table_1,table_2) */在多表关联查询中,指定不使用merge join方式进行多表关联。

select /*+ no_use_merge(t,t1) */ t.* from t,t1 where t.id=t1.id;

/*+ dynamic_sampling(table_name n) */

设置sql执行时动态采用的级别,这个级别为0~10select /*+ dynamic_sampling(t 4) */ * from t where id > 1234

NL_AJ

Use an anti-join in a sub-query. (depricated in Oracle 10g)

相关推荐
程序员侠客行27 分钟前
Mybatis二级缓存实现详解
java·数据库·后端·架构·mybatis
源码获取_wx:Fegn089527 分钟前
基于springboot + vue健康茶饮销售管理系统
java·vue.js·spring boot·后端·spring
小帅学编程32 分钟前
Spring(侧重注解开发)
java·学习·spring
早点睡觉好了38 分钟前
JAVA中基本类型和包装类型的区别
java·开发语言
Tipriest_39 分钟前
linux中的文本分接流tee命令介绍
linux·服务器·数据库
爱喝水的鱼丶40 分钟前
SAP-ABAP:在SAP世界里与特殊字符“斗智斗勇”:一份来自实战的避坑指南
运维·服务器·数据库·学习·sap·abap·特殊字符
阿拉伯柠檬41 分钟前
MySQL内置函数
linux·数据库·mysql·面试
雅俗共赏zyyyyyy42 分钟前
SpringBoot集成配置文件加解密
java·spring boot·后端
小Mie不吃饭1 小时前
2025 Oracle小白零基础到入门的学习路线
数据库·oracle
计算机学姐1 小时前
基于SpringBoot的送货上门系统【2026最新】
java·vue.js·spring boot·后端·mysql·spring·tomcat