Oracle性能优化笔记之sql共享

本文介绍Oracle性能优化中的sql共享

首先介绍一下sql共享的原理

sql共享原理
       在第一次解析SQL语句之后,Oracle将会SQL语句放入内存中。这块内存位于SGA的共享池(shared buffer pool1)中。它可以被所有数据库用户所共享。因此当一个用户执行一个SQL语句(游标)时候,如果它和之前执行过的语句完全相同。Oracle就能很快获得已经被解析的语句和最好的执行方案。

SQL共享的三个条件:

  1. 当前被执行语句和共享池中的语句必须完全相同(包括大小写、空格、换行等)
  2. 两个语句所指对象必须完全相同,即两条sql语句操作的数据库对象必须相同
  3. 两个sql语句中必须使用相同的名字绑定变量

对于第一个条件很好理解:

SELECT  *from ATABLE
Select  *  From Atable;

这两个sql虽然执行的是相同的操作,但是无法使用sql共享原理进行进行优化,因此这对我们sql代码的格式提出了非常严格的要求。

第二个条件也很好理解,即操作的数据库对象一致。

第三个条件意味着使用的绑定变量的名字也需要一致。先大概瞅一瞅什么是绑定变量名一致

--组一
select pin,name from people where pin =  :blk1.pin;
select pin,name from people where pin = :blk1.pin;
--组二
select pin,name from people where pin =:blk1.ot_jnd;
select pin,name from people where pin = :blk1.ov_jnd;

第一组的sql是相同的。第二组sql是不同的,哪怕在运行的过程中这两个不同的绑定变量被赋予相同的值也是无法共享sql的。

接下来介绍一下什么是绑定变量

Oracle的绑定变量:
绑定变量能够替代sql语句中的常量变量。

为什么要使用绑定变量:

下面的sql语句每执行一次就需要被硬解析一次,一百万用户就需要被硬解析一百万次,极大的消耗了CPU资源,甚至引起宕机。但是如果使用绑定变量,则该语句只需要被硬解析一次,然后重复调用即可。

select * from table1 where id = 32013484095139


 

发布了36 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tyro_blog/article/details/103008802