今天在项目中探讨到Oracle对于SQL语句的解析方法以及MySQL相应的处理方法:
-----------------------------------------------------------------------------------------------------------
先来看一下Oracle的机制:
oralce中有硬解析和软解析的概念,为了能够理解好这两个概念,我们先引入oralce是怎么执行SQL的
oracle在执行SQL的时候有如下步骤:
1 语法检查,例如SQL的拼写
2 语义检查,例如sql中的对象是否存在及相关的权限
3 sql解析,对sql进行语法解析,生成解析树及执行计划
3.1 硬解析 包括语法和语义分析,查看共享池是否有解析好的结果,然后选择执行计划和生成执行计划,执行sql
3.2 软解析,如果在共享池中有解析好的结果,直接执行sql
创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。
3.3 其中查看共享池的部分涉及到利用sql的哈希值和共享池中的哈希值做比较,这些比较包括大小写,字符串一致性,空格,注释
4 执行sql
这里再插入一个绑定变量的概念
绑定变量简单点理解就是在sql语句中的参数的地方使用一个占位符
1
select*fromempwhereempno=77