oracle优化
1、rownum关键字
1)rownum是一个伪列,需要在数据取出来后,rownum才会有值,因此在分页查找时,需要进行嵌套查询。
select sal,ename from (select rownum as rn,sal,ename from (select sal,ename from emp where sal is not null order by sal) x where rownum<10) where rn>6
2)rownum和orderby不要同时再一个查询里,因为oracle会先给伪劣赋值,然后再排序
2、rownum和rowid的区别
Rownum 是逻辑地址。表示查询某条记录在整个结果集中的位置,同一条记录查询条件不同对应的rownum是不同的而 rowid是不会变的。
Rowid是物理地址。用于定位数据表中某条数据的位置,是唯一的、不会改变,查询速度快。
3、选择最有效率的表名顺序(只在基于规则的优化器中有效)。
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。
4、如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。
5、 Where子句中的连接顺序Oracle采用自下而上或自右向左的顺序解析WHERE子句。根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾