博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变量绑定
阅读量:5999 次
发布时间:2019-06-20

本文共 1426 字,大约阅读时间需要 4 分钟。

1. 当一个用户与数据库建立起链接以后,会向数据库发出操作请求,一条或者多条sql语句,Oracle接收到sql之后,首先将这个sql做一个hash函数运算,得到一个hash值,然后到共享池中寻找是否有和这个hash值匹配的sql,如果找到,oracle将直接使用已经存在的sql的执行计划去执行当前的sql,然后将结果返回给用户。如果在共享池中没有找到相同hash值得sql,Oracle会认为这是一条新的sql,会按照下面的顺序来执行:

  1. 语法分析:查看sql是否符合Oracle规定的语法规则。
  2. 语义分析: 对sql做一些对象,权限方面检查,查看sql中操作的表是否存在,表中列是否正确,用户是否有操作这个对象的权限。
  3. 生成执行计划:查看操作对象统计信息,或者动态采样来生成执行计划。
  4. sql的执行:按照生成的执行计划执行sql并返回结果。

2. 硬分析hard parse(1-4)

  软分析soft parse(相同hash值得sql已经存在于共享池中)

3. 绑定变量本质就是把本来需要oracle硬分析的sql变成软分析,减少Oracle花费在sql解析上的时间和资源。也就是拿一个变量来代替谓词常量,让Oracle每次对用户发出的sql做hash运算时,运算出的结果都是同样的hash值。

select a from t where b='A' 绑定变量后就是:select a from t where b=:x;

4. OLTP必须要求绑定变量,OLAP不应该绑定变量:OLTP数据库要求内存命中率(buffer hit)越过越好,OLTP系统中sql语句大多是比较简单或者操作的结果集都很小,尽管操作的表可能非常大,但是操作的记录数可能只有1行或者几行,如果在这张表创建了索引,那么这种极小的结果集的操作使用索引最合适,在这种情况下,索引可能只需扫过几个数据块就可以定位到数据,而全表扫描会耗费更多资源,因此在这种情况下,即使每个用户的谓词条件不一样,执行计划也是一样的,就是统统使用索引来访问数据,几乎不大可能走全表扫描的情况,在这种执行计划几乎是唯一的情况下,使用变量来代替谓词常量,使用同一个执行计划是合适的。在OLAP系统中,大多时候运行的是一些报表sql,这些sql经常会用到聚合查询(比如group by),而且结果集也非常大,在这种情况下,索引不是必然的选择,甚至有的时候全表扫描性能会更优于索引,即使相同的sql,如果谓词条件不同,执行计划也可能不同。

  • 在OLAP系统中,sql硬分析的代价是可以忽略的,系统资源基本上时用来做大的sql查询,和查询比起来,解析消耗的资源微不足道。
  • 在OLAP系统中,让oracle确切的知道谓词的数值很重要,它直接决定sql执行计划的选择,这样做的方式就是不要绑定变量。
  • 在OLAP系统中,表,索引的分析至关重要,因为他是oracle为sql做出正确执行计划的信息来源和依据。所以需要建立一套能够满足系统要求的对对象分析的定时执行任务。

5. bind peaking:sql语句在硬分析的时候,oracle会看一下当前sql谓词的值,以便生成最佳的执行计划。变量的值不同,采用的执行计划也不同。它只发生在硬分析的时候,即第一次sql执行的时候,之后的变量不会再做peeking。

转载于:https://www.cnblogs.com/PerOpt/p/3734282.html

你可能感兴趣的文章
chrome 发送请求出现:Provisional headers are shown 提示
查看>>
在微信小程序中创建属于自己的个性弹框
查看>>
手挽手带你学React:一档 React环境搭建,语法规则,基础使用
查看>>
GraphQL:了解Spring Data JPA / SpringBoot
查看>>
204. Count Primes
查看>>
npm管理依赖
查看>>
mariadb 内存占用优化
查看>>
算法学习笔记:排序算法(二)
查看>>
js设计模式--迭代器模式
查看>>
[LeetCode] 958. Check Completeness of a Binary Tree
查看>>
Python 学习笔记之——用 sklearn 对数据进行预处理
查看>>
前端 CSS : 3# 纯 CSS 实现粉色爱心
查看>>
el-input 树型下拉框
查看>>
JS 基础: toLowerCase 和 toUpperCase 的实现
查看>>
如何启用SAP C4C OData Event Notification
查看>>
电影《动物世界》对战系统(Javascript)
查看>>
并行数据文件系统与计算的高性能集成
查看>>
[LeetCode] 557. Reverse Words in a String III
查看>>
常见设计模式要点总结
查看>>
用Python实现读写锁
查看>>