ORACLE SQL性能优化汇总 2022-08-05 15:12 137阅读 0赞 # ORACLE SQL语句共享 # ORACLE SQL语句具备共享特性,为了不让ORACLE数据库重复解析相同的简单单表SQL语句,ORACLE在SGA系统共享区域内SBP共享池内存放的SQL语句将被所有用户共享。(注:只适合单表查询,多表连接查询无效!) ORACLE SQL语句共享,表现在三个方面 **1.字符级共享** 可简单理解为 SQL语句大小写区分 如: select \* from employee; 与 select \* From employee; Select \* from Employee; 以上三条语句ORACEL解析器会认为是三条不同的SQL语句,即不能共享 **2.绑定变量必须相同** 如: A 1.select username,password from user where id=:uid 2.select username,password from user where id=:uid B 1.select username,password from user where id=:uid 2.select username,password from user where id=:Kid A两条语句可共享,B两条语句绑定不同,不可共享 **3.语句所指对象必完全相同** 如 用户 对象 访问权限 ROOT TAB1 private TAB2 public \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# AVEN TAB1 private TAB2 public SQL语句 Q1. SELECT COUNT(\*) FROM TAB1 ,不可共享,每一个用户有自己私有的表TAB1 Q2. SELECT COUNT(\*) FROM TAB2 ,可共享 # ORACLE SQL 多表联合查询 # ORACLE在多表查询时,选择合适的基础表进行查询,SQL效率会比较高! 所谓基础表,是指在排在from后面的表列当中,最后一个位置的表称为基础表。 ORACLE解析器在处理FROM子句时,会从FROM后面的最后一个表开始向前依次连接查询 如selec t a.name ,b.code,c.content from A a,B b,C c where 。。。时,会先查询C表,再与B表连接,最后与A表连接查询。 所以要选择适当的表作为基础表,放到from最后一个位置。 在此处我们假设各表的记录数大小顺序为A<B<C表 则优化语句不应该像以上SQL那样子写 最优写法:selec t a.name ,b.code,c.content from C c,B b,A a where 。。。 最后要说明一点:对于交叉表查询,所谓交叉关联表作为基础表进行查询最优。所谓交叉表,举学生选课为例来说,学生表,课程表,选课情况表,这三张表当中,选课情况表为交叉表,应作为基础表进行查询。 # where语句条件顺序 # SQL语句中,where子句后面的所带的条件的顺序带来的优化! ORACLE解析器采用自下而上的方式解析WHERE子句。 根据这一原理,我们应将能够一下过滤掉最大数量的条件应尽可能地放在WHERE子句的最后面,而对于关联表的连接查询,像这样的条件,刚尽可能地放在WHERE子句前面。 举例说明,EMP员工表,MGR主管表,EMP的mrg\_id为MGR表主键 查询年纪大于50岁并且主管是‘XXX’的记录时。 低效情况: select name,age from emp where age>50 and mrg\_id in select(select id from mrg where name='xxx') ; 高效情况: select name,age from emp where mrg\_id in select(select id from mrg where name='xxx') and age>50; # select 列引用符“\*” # 在使用select语句时,避免使用动态sql语句列引用符“\*”,当使用这个“\*”,是一种相当低效的方法,oracle会先对对应的表所有列名解析一遍,那样子会相当的慢慢,最高效的方法是,在用到哪些列名时,直接写列名查询。最后还有一个注意点,在使用count内部函数时,也不用轻易使用“\*”,改为select(pk) from tab\_name去查询。 # ORACEL多表连接查询指定表别名alias # 建议在ORACEL多表连接查询时,所要查询出来字段前使用别名alias,使用别名的好处有两个 第一,避免多表间存在同名列,而报错。举例,A表有字段c\_column,B表也有字段c\_column,SQL语句(select c\_column from A,B WHERE XXXX)时,会报错,无法知道c\_column归属哪张表 第二,减少数据库解析时间,指定了别名,数据库解析器直接去查别名所在名的字段,加快查询速度。 还有很多有关 oracle sql优化的规则请参考: [http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html][http_www.cnblogs.com_rootq_archive_2008_11_17_1334727.html] [http_www.cnblogs.com_rootq_archive_2008_11_17_1334727.html]: http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html
相关 SQL性能优化 你在项目中碰到过什么问题 你是怎么解决的 我的个人回答:之前在做货品管理项目的时候,涉及到进销存单据的查询,会遇到查询很慢,甚至查询失败的情况,我一般都会查阅自己写的SQ 爱被打了一巴掌/ 2021年09月22日 19:38/ 0 赞/ 658 阅读
相关 Oracle SQL性能优化 1、选用适合的Oracle优化器 RULE(基于规则) COST(基于成本) CHOOSE(选择性) 2、增加索引 重构索引: ALTER INDEX <INDEXNA 分手后的思念是犯贱/ 2021年11月29日 21:00/ 0 赞/ 575 阅读
相关 oracle sql 语句性能优化总结 Sql 优化: 当Oracle数据库拿到SQL语句时,其会根据查询优化器分析该语句,并根据分析结果生成查询执行计划。 也就是说,数据库是执行的查询计划,而不是Sql语句。 今天药忘吃喽~/ 2022年05月21日 06:38/ 0 赞/ 376 阅读
相关 Oracle SQL性能优化 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 谁践踏了优雅/ 2022年08月03日 13:36/ 0 赞/ 145 阅读
相关 ORACLE SQL性能优化汇总 ORACLE SQL语句共享 ORACLE SQL语句具备共享特性,为了不让ORACLE数据库重复解析相同的简单单表SQL语句,ORACLE在SGA系统共享区域内SBP共 拼搏现实的明天。/ 2022年08月05日 15:12/ 0 赞/ 138 阅读
相关 Oracle SQL性能优化常用方法 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driv 清疚/ 2022年08月12日 00:30/ 0 赞/ 195 阅读
相关 Oracle SQL性能优化 [Oracle SQL性能优化][Oracle SQL] (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的 雨点打透心脏的1/2处/ 2022年08月13日 00:43/ 0 赞/ 154 阅读
相关 oracle SQL性能优化 oracle SQL性能优化 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! (1) 选择最 待我称王封你为后i/ 2022年09月18日 07:49/ 0 赞/ 156 阅读
相关 Oracle SQL性能优化 > 最近看到有人私信我问了一些oracle sql的优化问题,分享一篇关于sql优化的文章,后面会多分享一些关于sql优化的文章 > (1) 选择最有效率的表 蔚落/ 2022年09月23日 03:51/ 0 赞/ 143 阅读
相关 Oracle SQL性能优化 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础 素颜马尾好姑娘i/ 2022年09月23日 05:54/ 0 赞/ 97 阅读
还没有评论,来说两句吧...