常见SQL语句优化.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常见SQL语句优化

* Oracle SQL语句优化 */25 表结构与开发人员 要理解表与表对应的索引的结构 : 可用DBMS_METADATA包列出表结构与约束及索引的结构 用DBMS_METADATA.GET_DDL也可列出其它对象的DDL … SET HEADING OFF SET PAGESIZE 100 SET LINESIZE 160 SET TRISPOOL ON SET LONG 6000 spool c:\list_stru SELECT Select dbms_metadata.get_ddl(||chr(39)||object_type||chr(39)||, ||chr(39)||object_name||chr(39)||) from dual; FROM USER_OBJECTS ORDER BY OBJECT_TYPE,OBJECT_NAME; spool off * Oracle SQL语句优化 */25 表结构与约束 DBA_TABLES OWNER TABLE_NAME DBA_CONSTRAINTS R 为引用完整性(referential integrity) P 为主键 C 检查(check constraint on a table) U 唯一索引(unique key) V 视图可带的检查(with check option, on a view) O视图中的只读(with read only, on a view) * Oracle SQL语句优化 */25 统计任务与业务处理 大量数据的统计 : 如果经常进行大量的统计,建议选择服务器闲置时间进行; 采用作业或日程表实现; 有多个作业时要分配到不同的时间段,避免资源的争用; 参考“资源管理”… * * * * * * Oracle SQL语句优化 Oracle SQL语句优化 Oracle Database 几个常见SQL优化 * Oracle SQL语句优化 */25 内容提要 FROM子句与WHERE子句顺序 几个不推荐与推荐方法 实体视图与查询重写 新SQL语句使用建议 编码人员与表结构的理解 * Oracle SQL语句优化 */25 FROM多表的顺序 ORACLE的解析器按照从右到左的顺序 FROM子句中写在最后的表(基础表 driving table)将被最先处理 ; 选择记录条数最少的表作为基础表 --表 TAB1 有16,384 数据行 --表 TAB2 有10 个数据行 ? --方法1(最佳): --选择TAB2作为基础表: select count(*) from tab1 , tab2 where . . . ? --方法2(不佳): --选择TAB2作为基础表 : select count(*) from tab2,tab1 where . . . * Oracle SQL语句优化 */25 FROM多表的顺序 FROM子句后三个表的情况: 例如:EMP表描述了LOCATION表和CATEGORY表的交集。 则EMP的顺序是关键:(这里EMP 是交叉表) 例1(效率高): SELECT * FROM LOCATION L , CATEGORY C, EMP E WHERE E.EMP_NO BETWEEN 1000 AND 2000 AND E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN; ? 例2(效率低): SELECT * FROM EMP E , LOCATION L , CATEGORY C WHERE E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN AND E.EMP_NO BETWEEN 1000 AND 2000; * Oracle SQL语句优化 */25 WHERE子句的连接顺序 采用自下而上的顺序解析WHERE子句 ; 表之间连接必须写在其他WHERE条件之前; 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 例1(低效): SELECT … FROM EMP E WHERE SAL 50000 AND JOB = ‘MANAGER’ AND 25 ( SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); 例2(高效): SELECT … FROM EMP E WHERE 25 ( SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL 50000 AND JOB = ‘MANAGER’; * Oracle SQL语句优化 */2

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档