当前位置: 首页 > news >正文

oracle 设置动态变量,数据库优化技术之Oracle数据库动态绑定变量

我们知道,分享池(shared pool)是系统大局区(System Global Area ,SGA)中一个极其重要的分享内存构造。然而Oracle数据库将已解析、已编译的SQL 连同其他内容存储在这里。可是已解析,已编译的SQL要想告终其复用有一个前提,要求开发人员在大多数情形下都会利用绑定变量。本文我们主要就介绍了一些Oracle数据库绑定变量的知识,下面我们就开始介绍。

绑定变量(bind variable)是查询中的一个占位符。

例如比拟如下SQL语句:

select * from table whereid=1与

my_id:=1

select * from table whereid=my_id

对于***个SQL语句,在查询中利用直接量(常量),那么每个查询都将是一个崭新的查询,在数据库看来过去从未见过,定然对查询举行解析、限量(命名解析)、平安性察看、优化等。容易地讲,即便你厉行的每条不同的语句都要在厉行时举行编译。(解析包括有硬编码变量的语句称为硬解析)

而对于第二个查询利用了一个绑定变量my_id,变量值在查询厉行时供给。这个查询只编译顺次,随后会把查询计划存储在一个分享池(库缓存)中,以便尔后获得和重用这个查询计划,(重用已解析的查询计划称为软解析)。

软解析与硬解析之间的差异重要体目前以下几个方面:

1、与软解析相比硬解析必需的工夫更长,而且要花费更多的资源,硬解析会收缩系统能扶持的用户数。

2、硬解析一个查询时,数据库会更伙计夫地挪借一种低级串行穿戴备,这称为闩(latch),这些闩能防御Oracle分享内存中的数据构造不会同时被两个历程修正,而且万一有人正在修正数据构造,则不批准另外的人再来读取。对这些数据构造加闩的工夫越长、越频繁,排队期待闩的历程就越多,期待队列也越长。你可能开始垄断贵重的资源。有时你的计算机显明利用不足,然而数据库中的所有利用都运行得极其慢。构成这种假象的起因可能是有人割据着某种串行穿戴备,而其他期待串行穿戴备的人开始排队,因而你无法全速运行。数据库中凡是有一个利用出现不佳,就会严重地波及所有其他利用的功能。万一只有一个薄利用没利于用绑定变量,那么即便其他利用原本设计得很好,能妥本地将已解析的SQL放在分享池中以备重用,但因为这个薄利用的存在,过一段工夫就会从分享池中剔除已存储的SQL。这就使得这些设计贴切的利用也定然再次硬解析SQL。

代码告终实例:

1、oracle自己默认告终的绑定变量:

for i in 1..1000 loop

select count(*) into my_count from table wheremy_type=i;

ne.nexuscenter.com.cn

在上面的情形,Oracle会自己绑定变量,即,万一参数保留在一个数组中,select语句放在一个循环中,select 语句只会编译顺次。

2、动态绑定变量

my_type:='type1';

my_count:=0;

my_sql:='select count(*) into :x from table where type = :y'

Execute Immediate my_sql into my_count using my_type;

然而这段代码包括额外的String,并非全面必需。

关于Oracle数据库优化的知识就介绍到这里了,如果您想了解更多的关于Oracle数据库的知识,可以看一下这里的文章:http://database.51cto.com/oracle/,相信一定能够带给您收获的!

【编辑推荐】

【责任编辑:赵鹏 TEL:(010)68476606】

点赞 0

相关文章:

  • C++专家荣耀5月22日下午2点作客51CTO专家聊天室
  • oracle connection reset,Oracle JDBC 连接卡死后 Connection Reset
  • oracle查询应用语句,Oracle查询语句应用经验总结
  • POE技术简介
  • fedora 安装oracle 12c,Fedora下安装Oracle 11g
  • RIP路由协议及工作原理
  • oracle 注册表修改,Oracle 客户端注册表字符集修改-----解决乱码 .
  • 兵经百言
  • Linux服务器负载均衡宝塔,新版负载均衡教程
  • linux的esp8266编译,ubuntu下esp8266 RTOS SDK编译环境搭建
  • 遍历Symbian某目录下的所有文件
  • linux下密码管理工具,Linux使用密码管理工具pass管理密码的方法
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • linux不同用户python不一样,Ubuntu18.0 解决python虚拟环境中不同用户下或者python多版本环境中指定虚拟环境的使用问题...
  • 也要Apollo了
  • JS 中的深拷贝与浅拷贝
  • [译]CSS 居中(Center)方法大合集
  • Angular 响应式表单之下拉框
  • ECMAScript6(0):ES6简明参考手册
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • mongodb--安装和初步使用教程
  • Node + FFmpeg 实现Canvas动画导出视频
  • Puppeteer:浏览器控制器
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Solarized Scheme
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 自制字幕遮挡器
  • Java数据解析之JSON
  • 回归生活:清理微信公众号
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 达梦数据库知识点
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Z2294. 打印树的直径
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (3)nginx 配置(nginx.conf)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (zhuan) 一些RL的文献(及笔记)
  • (笔试题)合法字符串
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)shell调试方法
  • (转)原始图像数据和PDF中的图像数据
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 中让 Task 支持带超时的异步等待
  • .Net的C#语言取月份数值对应的MonthName值
  • .net网站发布-允许更新此预编译站点
  • .Net中ListT 泛型转成DataTable、DataSet