赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索

通过分析SQL语句的执行计划优化SQL(四) (1)

发布时间:2007.07.31 08:03     来源:赛迪网    作者:limeinan

五: ORACLE的执行计划

背景知识:为了更好的进行下面的内容我们必须了解一些概念性的术语:

共享sql语句

为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果该语句和之前的执行过的某一语句完全相同,并且之前执行的该语句与其执行计划仍然在内存中存在,则ORACLE就不需要再进行分析,直接得到该语句的执行路径。ORACLE的这个功能大大地提高了SQL的执行性能并大大节省了内存的使用。使用这个功能的关键是将执行过的语句尽可能放到内存中,所以这要求有大的共享池(通过设置shared buffer pool参数值)和尽可能的使用绑定变量的方法执行SQL语句。

当你向ORACLE 提交一个SQL语句,ORACLE会首先在共享内存中查找是否有相同的语句。这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。

下面是判断SQL语句是否与共享内存中某一SQL相同的步骤:

1. 对所发出语句的文本串进行hashed。如果hash值与已在共享池中SQL语句的hash值相同,则进行第2步:

2.将所发出语句的文本串(包括大小写、空白和注释)与在第1步中识别的所有

已存在的SQL语句相比较。

例如:

SELECT * FROM emp WHERE empno = 1000; 
        和下列每一个都不同 
        SELECT * from emp WHERE empno = 1000;
        SELECT * FROM EMP WHERE empno = 1000;
        SELECT * FROM emp WHERE empno = 2000;

在上面的语句中列值都是直接SQL语句中的,今后我们将这类sql成为硬编码SQL

或字面值SQL

使用绑定变量的SQL语句中必须使用相同的名字的绑定变量(bind variables) ,

例如:

a. 该2个sql语句被认为相同
        select pin , name from people where pin = :blk1.pin; 
        select pin , name from people where pin = :blk1.pin; 
        b. 该2个sql语句被认为不相同
        select pin , name from people where pin = :blk1.ot_ind; 
        select pin , name from people where pin = :blk1.ov_ind;

今后我们将上面的这类语句称为绑定变量SQL。

1 2 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 解析SQL Server 2005 溢用之:合并列值 (07-30) · 解析SQL Server7.0的六种数据移动方法 (07-30)
· SQLServer悲观锁定和乐观锁定应用实例 (07-30) · 快速掌握SqlServer下数据库链接的使用 (07-30)
· 细化解析:SQL Server2005查询计划指南 (07-30) · 不要在SQL Server中盲目地追求一句处理 (07-30)
· 解析SQLServer怎样才能访问sybase中的表 (07-30) · 怎样终止:SQL Server数据库的恢复过程 (07-29)
· 轻松学会:配置SQL Server来做远程备份 (07-29) · SQL/ASE SERVER 移植到同种平台的系统上 (07-29)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管