1 数据库的sql语句是忽略大小写的,即
select * from users
SELECT * FROM USERS
SELECT * from users
一条语句写了如上三种形式,但是在oracle的SGA的共享池中确对应着三个不同的Hash值,
会降低sql语句的命中率。
2 exists与in
exists是用于判断存在性,in是用来判断匹配性。
在使用exists时,它会将子查询的外部表视作左表,内部表视作右表进行连接查询,在查询过程中
会使用HASH JOIN 这种特殊的优化方式,选择数据量较小的表作为主表。并且oracle还利用SEMI
策略,防止产生重复记录,及针对主表的每一行,一旦与从表中个某条匹配成功便立即返回。
HASH JOIN是exists判式的一个特殊操作。
SEMI连接时exists子查询的一种特殊处理方式。
in判式与exists的执行过程完全一致,oracle已经把in自动优化成exists查询了。一般情况下还是exists的速度快。
not in 将对子查询的表进行全表扫描,是最低效的方式,利用not exists替代not in是提高效率的一种方式。