组函数会忽略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)

相关推荐
hef2884 小时前
如何生成特定SQL的AWR报告_@awrsqrpt.sql深度剖析单条语句性能
jvm·数据库·python
dllxhcjla5 小时前
微服务全套
java
亚历克斯神5 小时前
JVM 内存管理 2026:深度解析与调优实战
java·spring·微服务
xcjbqd05 小时前
Python API怎么加Token认证_JWT生成与验证拦截器实现
jvm·数据库·python
二月十六6 小时前
SQL Server 2022 新语法:IS [NOT] DISTINCT FROM 彻底解决 NULL 比较难题
数据库·sqlserver
~ rainbow~6 小时前
前端转型全栈(四)——常见的错误及解决方案
数据库·oracle·全栈
数厘6 小时前
2.1SQL 学习:先懂数据库概念再学 SQL
数据库·sql·学习
逻辑驱动的ken6 小时前
Java高频面试题:03
java·开发语言·面试·求职招聘·春招
Cat_Rocky6 小时前
redis哨兵模式
数据库·redis
广师大-Wzx7 小时前
一篇文章看懂MySQL数据库(下)
java·开发语言·数据结构·数据库·windows·python·mysql