【问题标题】:performance of parameterized queries for different db's不同数据库的参数化查询的性能
【发布时间】:2023-03-24 14:40:01
【问题描述】:

很多人都知道使用参数化查询来防止sql注入攻击很重要。

在执行在线事务处理时,sqlite 和 oracle 中的参数化查询也快得多,因为查询优化器不必在执行之前重新解析每个参数化的 sql 语句。我已经看到当你使用参数化查询时,sqlite 的速度提高了 3 倍,而当你在一些具有大量并发的极端情况下使用参数化查询时,oracle 的速度可以提高 10 倍。

其他数据库如 mysql、ms sql、db2 和 postgresql 怎么样?

参数化查询和文字查询在性能上是否存在相同的差异?

【问题讨论】:

    标签: parameterized multiple-databases


    【解决方案1】:

    关于 MySQL,MySQLPerformanceBlog reported 对非准备语句、准备语句和查询缓存语句的每秒查询的一些基准。他们的结论是,准备好的语句实际上比 MySQL 上的非准备好的语句快 14.5%。点击链接了解详情。

    当然,比率会根据查询而有所不同。

    有些人认为存在一些开销,因为您要从客户端到 RDBMS 进行额外的往返——一个是准备查询,第二个是传递参数并执行查询。

    但现实情况是,这些都是在没有实际测量的情况下做出的错误假设。我从未听说过在任何品牌的数据库中准备好的语句都会变慢。

    【讨论】:

    • 今天,几乎不需要额外的往返来准备参数化查询,因为许多 DBMS 支持由 SQL 字符串相等性标识的参数化查询。
    • (续注释):例如 SQL Server 上的 sp_executesql 或 Oracle 上的“立即执行”。 “准备”方法在许多语言中仍然可用,从数据库中检索查询标识符,只能在连接上下文中使用,并且容易出现编程错误(例如在每次查询之前调用“准备”)。 SQL 字符串标识的查询可以在整个甚至多个应用程序中重复使用。
    【解决方案2】:

    我几乎总是看到速度有所提高 - 但一般来说只是第一次。在计划被加载和缓存后,我会推测各种数据库引擎对于任何一种类型的行为都是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多