Oracle数据库规范.ppt
文本预览下载声明
? 2010 Oracle Corporation SQL开发规范 ? in 替换or ,比如select * from t where id=1 or id=2 or id=3,select * from t where id in (1,2,3) ? union 与or ,union有时比or更有效,or有时比union更有效,综合union 替换or或者or 替换union后是否能用到索引,以及条件的选择性来综合判 断和评估。 ? =替换,比如select count(1) from t where id=3 而不用select count(1) from t where id2 ? order by在对索引列进行排序时需要注意 ? order by 后面的字段顺序,应该和索引列(复合索引)的顺序 保持一致。 ? order by后面的字段如果为null,则不能用到索引 select id from t order by id. 索引在id列上,如果id列为null,则该语句 要用全表扫描再排序,如果为not null,则直接用索引扫描即可。 如果id列为null,则可以通过用where和order by置换的方式,比如 select id from t order by id 全表扫描再排序 select id from t where id0 直接扫描索引 32 ? 2010 Oracle Corporation SQL开发规范 ? 避免数据类型转换,如果 id列为number型,select * from t where id=?1?则会发生数据转换id=to_number(?1?),如果类似转换发生在索 引列上将导致索引不能被用到。 ? group by ,order by 尽量放到SQL的最末尾,这样可以把不需要 返回的行过滤掉,减少需要进行group by order by 操作的集。比 如select name from t group by name having name=?xxxx? 效率肯 定不如select name from t where name=?xxxx? group byname; ? !=操作符 除非必须必要,否则坚决避免使用!=操作符,因为使用!=会使 ORACLE无法使用索引,Oracle内核会假定查询会返回表中的多 数记录,因此就会走FULL TABLE SCAN。 33 ? 2010 Oracle Corporation 如何评估SQL语句的性能 ? 分析与SQL执行相关的配置 ? ? ? ? 参数:optimizer_index_cost_adj 参数:optimizer_mode 参数:sql_trace 参数:db_file_multiblock_read_count ? 分析SQL执行计划 ? ? ? ? 查看SQL执行计划有三种方式 : 设置set autotrace: 通过explain plan for 通过tkprof工具 34 ? 2010 Oracle Corporation 通过SQL TRACE分析SQL的执行 SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力 的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE 是非常常用的方法。 ? SQL_TRACE使用 SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式 在具体session启用。 ? 10046使用 10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强. 10046事件可以设置以下四个级别: ? ? ? ? 1 - 启用标准的SQL_TRACE功能,等价于sql_trace 4 - Level 1 加上绑定值(bind values) 8 - Level 1 + 等待事件跟踪 12 - Level 1 + Level 4 + Level 8 ? 分析 分析sql在执行过程中发生的解析次数,逻辑读次数,变量绑定,所花时 间。改变SQL写法,变换查询条件等因素,再进行trace分析解析次数, 逻辑读次数,变量绑定等指标,最后判断最优化的SQL。 35 ? 2010 Oracle Corporation PL/SQL控制结构编码 PL/SQL提供了三种控制程序流程的语句: ? 条件控制语句 IF:使用ELSEIF 对相互排斥的条件进行 判断。 ? 循环语句 FOR 、 WHILE 、 LOOP:不使用EXIT和 RETURN语
显示全部