01--oracle性能篇笔记
1、连接PLSQL显示SQL执行时间
SQL>SET TIMING ON
SQL>select * from t_user;
SQL>select user_name from t_user;
2、避免使用*,具体查询到某列
3、查询部分行的数据,不查询所有的数据,用where romnum<=n order by 某列
4、ROWID高效删除重复记录:
每一条记录都有一个名为ROWID的列,在整个数据库中是唯一的,确定了每条记录是在Oracle中哪个数据文件、块、行上,删除重复记录,下面为最高效:
delete from stu s
where s.rowid>(select min(t.rowid)
from stu t where t.sno=s.sno)
表中重复记录较多时:
delete from stu s
where s.rowid not in (select min(t.rowid)
from stu t where t.sno=s.sno)
5、高效统计记录行数:
select table_name,num_rows
from user_tables
where table_name='stu';
注意:user_tables视图中保存了所有用户表基本信息,包括表空间、状态、缓存等
6、多使用commit语句,能释放更多的资源。释放的资源包括:
(1)回滚段上用于恢复数据的信息
(2)REDO LOG BUFFER中的空间
(3)被程序语句获得的锁
7、用EXISTS替代IN谓词,带有EXISTS谓词的子查询不返回任何实际数据,其只产生逻辑真值TRUE或者FALSE
NOT IN是最低效的[因为对子查询中的表执行了一个全表遍历],所以避免使用not in
8、用>=代替>运算符
9、select语句中避免使用distinct语句[distinct用二重循环查询来实现消除重复记录,这就需要对表中每行记录进行 比较,影响性能]
10、EXPLAIN PLAIN FOR + SQL对该语句进行解释
select * from table(dbms_xplan.display)来看执行计划