type
status
date
slug
summary
tags
category
icon
password
comment
AI summary
定义
绑定变量指的是在sql语句中的条件使用变量而不是常量
对于oracle来说这三条sql完全不同,在执行的时候都需要硬解析。因为oracle会根据sql的文本来计算在内存里的哈希值(hash),虽然这些sql只有最后几个字符不一样,但是计算出的hash值有天差地别,如果将sql改成如下
用&i来取代后面的值,这样的好处是在执行sql的时候只会对带有变量的sql进行一次硬解析(hard parse)之后只进行软解析(soft prase)。仅三条sql可能不会有什么变化,但是数量级如果是十万或者百万,这样的话节省的消耗可想而之。
使用绑定变量可以减少相同或类似语句的重复编译,减少不必要的I/O,提高效率
SQL 执行步骤
Oracle中每条sql在执行前都要解析,解析分为硬解析、软解析、软软解析。
Oracle会缓存DML语句,相同的DML语句会进行软解析。但不会缓存DDL语句,所以DDL每次都做硬解析。硬解析是一个很耗时的操作,所以应用程序内部很少执行执行DDL。DDL一般在部署前执行。
nestat -ano | findstr 8080taskkill -PID 13664 -Fbash
2.语义检查(symantic check): 对象是否存在,是否有权限。
3.sql解析(parse): 利用内部算法对sql进行解析,生成解析树及执行计划。
4.执行sql,返回结果(execute and return)
硬解析
Hard Parse:对提交的Sql完全重新从头进行解析(当在shared Pool中找不到时候将会进行此操作),总共有一下5个执行步骤:
1.语法分析
2.权限与对象检查
3.在共享池中检查是否有完全相同的之前完全解析好的. 如果存在,直接跳过4和5,运行Sql, 此时算soft parse.
4.选择执行计划
5.产生执行计划
软解析
Soft Parse: 在Shared Pool中找到了与之完全相同的Sql解析好的结果后会跳过Hard Parse中的后面的两个步骤。
- 作者:Anthony
- 链接:https://github.com/lazyBoy1998/article/oralce_1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。