优化策略:1.服务器操作系统参数配置;2.oracle数据库参数配置;3.SQL语句优化;4.网络性能调整
数据库用户相应时间=系统服务时间+用户等待时间
1.减少系统服务时间,即调高oracle吞吐量;2.减少用户等待时间,即减少用户访问DB的冲突率
数据结构设计:第1范式,没有重复的组或多值的列;第2范式,每个非关键字段都必须依赖于主关键字;第3范式,1个非关键字不能依赖于另个非关键字
a 水平分割:按行分割分成多个表,oracle按行查询的,mysql按列查询,统计汇总时,程序更复杂
b.垂直分割:主键关联多个表,一次IO读取多个行,提高访问速度
访问Table方式:a.全表扫描;b.通过ROWID访表,oracle采用index实现数据和存放数据的物理地址联系rowid联系查询。
共享SQL语句:当同样的简单的sql语句之前已运行了,io已经把数据读入了SGA中,下次原样不需重读IO了
oracle查询多个表时,会以最右端的表为基表,然后排序以及合并,所以应数据量少的表做基表
where连接顺序,自下而上解析where子句,所以能够过滤掉最大的条件应放入最后
解析SQL包括估算索引的利用率、绑定变量、读取数据块,减少oracle访问次算,减少oracle工作量;null不能索引
如:select a.name,b.name from emp a,emp b where a.name='chen' and b.name='yang'
使用DECODE避免重复扫描相同记录或重复连接相同表
删除重复记录,delete from emp e where e.rowid>(select min(x.rowid) from emp x where x.no=e.no)
使用truncate替代delete 不需要commit且占用资源少
select name form emp e where e.no in (select t.no from dept) in比EXITS性能较低 NOT IN需要内部排序合并所以比NOT EXITS更低select name from emp e where EXITS (select 'X' from dept d where d.no=e.no)
order by在子句中不使用,且order by的字段用索引