有人可以提供准备好的声明有利于提高效率的场景吗?

时间:2012-08-16 14:21:05

标签: performance prepared-statement

不适用于sql注入保护。我知道这个好处,但就编译部分而言它更有效率,我找不到一个有利于效率的场景。我在这里希望如此。模糊,我知道,但我不知道除了这里在哪里问。感谢。

2 个答案:

答案 0 :(得分:0)

可以轻松列出预备陈述的好处

  1. 你摆脱了编译开销
  2. 您无需准备执行计划
  3. 由于没有声明,但只有参数需要穿过电线,你才能获得带宽。
  4. 如果您有一个声明在很长一段时间内工作数百万次,那么所有这些项目对提高效率都很重要。如果它很容易开发(如存储过程),那就是双赢局面,但是......

    我曾经不得不开发一个使用“C with Embedded SQL”直接连接到AS / 400系统的代码,您可以在C代码中编写sql,将其提供给预处理器以输出可编译代码和一个活页夹文件,然后将binder文件提供给as / 400系统以准备语句。所有这些都是因为他们拒绝安装ODBC支持他们的服务器。

    编写和测试该代码是一件痛苦的事。它工作非常慢,改变任何东西肯定会破坏系统。编写这样的代码并不是高效

    效率取决于根据您的观点而变化的变量。

    在我的示例中,AS / 400家伙很高兴,因为他们通过不在其上安装一些 cr.p 软件来保持系统高效。客户很高兴,因为他们强迫开发人员使用效率低下的方法编写代码的方法高效足以使其保持在时间轴中。网络管理员高效,因为只有最小的数据通过网络传输(甚至没有元数据)。对于开发人员而言,它非常效率低,因为它耗时且容易出错。但同样的开发人员也可以高效来获得在简历上“看起来不错”的东西。

    你现在看到了吗?

答案 1 :(得分:0)

场景很简单:交易处理。

正如Edokan所说,准备一份声明消除了编译SQL和创建执行计划的开销。在更复杂的查询中,此开销很小。但是,如果您每秒运行100或1000个事务,则此开销可能会干扰有效使用数据库。

当然,查询计划可能不是最好的,尤其是当基础表的统计信息发生变化时。准备时的特征用于确定最佳查询计划。这些可能会随着时间而改变,不同的查询计划可能会变得更好。对于更复杂的查询,这更是一个问题。由于这些通常需要更长的时间才能运行,因此编译开销不是问题。