
续

14、>=是直接定位:
在Oracle 解析器中,如果使用 >还需要一个判断的过程。
15、使用索引:
使用于查询的表,提供了主键的唯一性验证,long或者long raw数据类型,几乎可以索引所有列定期重建索引,在删除和修改多的表,不适用索引,原因,不解释了。
注意,并不是创建了索引后就一定会走索引,使用索引的时候,不能使用索引进行一些计算,否则失效。
使用索引快于全表扫描,在多表连接使用索引提高效率。
避免在索引上使用not:会停止索引(not表示的是:没有什么, 而索引表示的是:有什么)
用exitsts替代distinct:
在提交一个包含一对多表信息(部门和雇员表)的查询时使用。原因:查找即返回原理
避免在索引列上使用计算:
低效:
SELECT *
FROM dept
WHERE sal * 12 > 25000
高效:
SELECT *
FROM dept
WHERE sal > 25000 12
避免在索引列上使用is null 和 is not null:
因为索引不会对null数据类型进行索引,索引只是记录有什么
对于单列索引,不会进行索引
对于符合索引,如果所有列多为空,不进行索引,只要有一个列不空,就索引。
在Oracle中空不等于空,所以,就会插入若干条相同键值的记录,而他们的值都是空,而空值不进行索引,所以,当进行空值比较时,会使用Oracle,停止使用该索引。
低效:
Select ….
From dep
where dep_code is not null;
高效:
Select ….
From dep
where dep_code >=0;
这里也会过滤掉null列
总是使用索引的第一个列:
如果索引建立在多个列上,只有咋他的第一个列,被where自居引用时,优化器才会选择使用该索引,当仅使用索引的第二个列是,优化器会忽略索引,使用全表索引。
16、使用union替代where字句中的or:
对索引列使用or会导致全表扫描,针对多个索引列有效
17、在oracle8i之前,两者执行路径似乎相同,
但能用in的就别用or。
18、使用union-all:
union-all:不排序,查询所有的,不过滤重复的
union:排序(优化sort_raea_size这块内存),过滤重复的。
19、order by 用where 限定:
order by名中索引的条件比较苛刻
排序列必须包含在相同的索引中,并保持索引中的排列顺序,Order by中 所有列不能定义为空。
20、需要当心的where子句:
!=将不使用索引
||字符连接函数,会停用索引
+ - * 会停用索引
相同的索引列不能互相比较,否则会启用全表扫描
21、使用大写:
Oracle中会把所有的语句转换成大写,
有些内部表,如,查询表名时,判断某个表是否存在,如果是大写有效,小写就是无效的
22、根据磁盘读写速率调整块的大小:
一个Oracle数据库中,表空间、段、区、数据块的概念,可以根据服务器的I/O性能调整块的大小。
下期更精彩

本文分享自微信公众号 - Oracle优化大师,如有侵权,请联系 service001@enmotech.com 删除。




