`
zzhonghe
  • 浏览: 249415 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

硬编码SQL有时比绑定变量SQL要好

    博客分类:
  • DB
阅读更多
众所周知,SQL提交到数据库引擎后,在执行前要做一系列的工作,包括解析,优化,生成执行计划等,这个过程是比较消耗CPU的计算过程。

相同的SQL提交到引擎后,就可以省略掉执行前的一系列工作,直接选定上次用过的那个执行计划进行查询。所以,绑定变量的SQL就在这个情境下发挥最大的作用了,让多个查询共享一个游标和执行计划,大大提高了效率。


但事情也不完全是这样的,在有些范围查询中,关键查询条件如果是变量的话,那引擎就很难依此作出优化,然后就得出了错误的执行计划,大大影响了效率。



比如有个表, 某个字段值 value 为 1~10000,value字段上有索引, 查询语句为:   select * from table where value>?

当?=9995的时候,结果集只有5条,这个时候采用索引查询的效率会好些。
而当?=100的时候,结果集有9千多,这个时候全表扫描会比索引查询的效率好很多。


但是由于我们用的是绑定变量, 引擎由于不知道value是9995或者是100,因此很难作出正确的执行计划,那么执行效率就看人品了。


这个时候如果采用硬编码的方式,生成的执行计划就能给出最优解。


所以,结论是:  当执行的SQL需要消耗比较长时间,解析,优化,生成执行计划的时间与之比起来可以忽略的时候,那么还是建议用硬编码,这样引擎能够根据查询条件的值进行优化,并给出最优解。而执行时间短,但是次数多的SQL,就需要坚决采用变量绑定。
分享到:
评论

相关推荐

    也谈oracle 数据库的绑定变量特性及应用

    绑定变量允许开发者创建动态SQL语句,其中的变量在执行时才提供具体的值,而不是硬编码到查询中。这种做法带来了显著的优势,尤其是在处理大量相似但不完全相同的查询时。 1. 为什么使用绑定变量? - **提高性能**...

    Oracle数据库绑定变量特性及应用

    在硬编码查询中,每更换一个员工编号,Oracle都需要重新处理,而绑定变量查询则只需编译一次,后续只需要改变变量值即可,这大大提升了效率,尤其在频繁执行相同结构但不同参数的查询时。 接下来,我们通过一个示例...

    Oracle数据库的绑定变量特性及应用.pdf

    绑定变量的使用能够显著改善SQL语句的执行效率,尤其是在处理大量重复查询时。本文将深入探讨绑定变量的原理、优势以及如何在实践中应用。 首先,为什么我们要使用绑定变量?在Oracle数据库中,每次执行带有硬编码...

    Oracle Sql高效语句的写法诀窍

    合理的SQL编程习惯应当包括避免SQL语句硬编码,尽量使用绑定变量来实现代码的复用,减少解析时间,从而提高整体的数据库操作效率。在进行数据库设计和查询优化时,理解并应用绑定变量是至关重要的。同时,数据库管理...

    Oracle_数据库的绑定变量特性及应用终稿.pdf

    举个例子,假设你要查询不同员工的编号,用硬编码的方式(如`SELECT * FROM emp WHERE empno='123'`)每次都会创建新的执行计划,而使用绑定变量(如`SELECT * FROM emp WHERE empno=:eno`)则只需解析一次。...

    通过分析SQL语句的执行计划优化SQL.doc

    硬编码SQL由于列值的不同导致无法共享执行计划,而CURSOR_SHARING参数可以通过设置,让数据库在一定程度上接受列值变化但结构相同的SQL作为共享SQL,从而提高效率。 总的来说,分析SQL语句的执行计划涉及多个层面,...

    ORACLE培训SQL性能优化.pptx

    例如,在以下语句中,我们可以使用绑定变量来代替硬编码的值: SELECT * FROM USER_FILES WHERE USER_NO = ‘10001234’; 可以改写为: SELECT * FROM USER_FILES WHERE USER_NO = :BV1; 在使用绑定变量时,...

    oracle变量绑定[文].pdf

    在Java中,如果SQL语句直接包含硬编码的常量,会导致一系列问题。 首先,不使用绑定变量会导致SQL语句的硬分析(Hard Parse)过于频繁。当Oracle遇到一个SQL语句时,它会检查其在Shared Pool(内存区域)中是否存在...

    Oracle SQL语句执行计划的探讨.pdf

    在实际应用中,硬编码SQL(如例a所示)通常比绑定变量SQL(如例b所示)更影响性能,因为每次查询时,硬编码SQL都会被视为不同的语句,导致频繁的软解析。而绑定变量可以重用已存在的执行计划,减少解析次数,提高...

    通过分析SQL语句的执行计划优化SQL

    4. **绑定变量的使用**:通过使用绑定变量可以避免硬编码值,这样即使查询文本相同但参数不同,数据库也能有效地重用执行计划,减少解析成本。 5. **CURSOR_SHARING设置**:合理设置CURSOR_SHARING参数可以帮助...

    hibernate实现动态SQL查询

    相比静态SQL,动态SQL更加灵活,能够适应复杂多变的查询需求,避免了硬编码SQL带来的问题,如代码冗余、难以维护等。 三、Hibernate中的动态SQL 在Hibernate中,我们通常使用HQL(Hibernate Query Language)或...

    如何提高sql性能

    **案例1:SQL绑定变量的使用** 假设有一个报表查询,每天需要执行多次,并且每次查询的参数都不同。如果直接使用硬编码的方式编写SQL语句,每次执行都需要进行硬解析,这将大大降低性能。通过引入绑定变量,可以将...

    oracle执行计划详解

    从 Oracle 8i 开始,新引入了 CURSOR_SHARING 参数,该参数的主要目的就是为了解决在编程过程中已大量使用的硬编码 SQL 问题。 Oracle 执行计划是 Oracle 数据库性能调整的关键部分,了解这些背景知识和重要概念...

    SQL常用优化方法

    10. **使用绑定变量**:使用绑定变量代替硬编码值,可以防止SQL语句的多次解析,提高执行效率。 四、数据库设计优化 11. 数据库规范化:合理进行数据库规范化,减少数据冗余,提高数据一致性,但过度规范化可能会...

    sql用来优化你的sql语句

    2. 使用绑定变量而不是硬编码值,以减少解析次数和提高语句复用。 3. 分析和调整索引,确保它们能有效地支持查询。 4. 使用适当的JOIN算法,如嵌套循环、哈希JOIN或归并JOIN,根据数据量和查询结构选择最合适的。 5....

    Oracle.SQL必备参考

    3. 绑定变量:使用变量而不是硬编码值,减少解析开销并提高性能。 五、安全性与权限管理 Oracle SQL支持精细的权限控制,如角色、对象权限和系统权限,确保数据安全。 1. 角色:集合权限,便于权限分配和管理。 2...

    MyBatis 3 _ SQL 语句构建器1

    通过这样的方式,开发者能够更方便地构建、维护和调试 SQL 语句,同时减少了硬编码 SQL 语句带来的潜在错误。此外,它还支持预编译的参数绑定,提高了 SQL 执行的安全性,防止了 SQL 注入攻击。 总的来说,MyBatis ...

    DBA对Oracle SQL编写规范的总结

    - **规范要求**:在写入当前时间时,应当使用系统提供的函数,如SYSDATE,而不是硬编码具体的日期或时间字符串。 - **示例**: ```sql INSERT INTO LOG (ACTION_TIME) VALUES (SYSDATE); ``` #### 三、PL/SQL...

    SQL性能编写技术说明书

    - 避免在查询中使用硬编码的值,推荐使用绑定变量,以实现SQL的复用和缓存。 - 避免使用自定义函数,优先使用数据库提供的系统函数,以提高执行效率。 - SELECT语句中应避免使用通配符“*”,应指定具体的列名。 - ...

Global site tag (gtag.js) - Google Analytics