【问题标题】:performance of parameterised SQL参数化 SQL 的性能
【发布时间】:2012-04-06 17:37:37
【问题描述】:

我有一个类似的查询

SELECT *
FROM myTable
WHERE key LIKE 'XYZ'

“XYZ”值由用户输入(可能包括 % 和 _)

如果我使用字符串连接构造查询,它将在 10 秒内运行。 但这是不安全的,我应该使用参数化查询。

所以我正在使用 odbc 命令对象及其执行方法构造查询,并传递一个参数。

SELECT *
FROM myTable
WHERE key LIKE ?

不幸的是,参数化的 SQL 执行方法需要整整一分钟。

这个查询是钻取/调查包的一部分,我在所有参数化查询(与字符串连接相比)都有类似的减速。

我如何找出时间的去向(并修复它)?

【问题讨论】:

  • 搜索参数嗅探......
  • 桌子有多大?柱子的类型是什么?列上有索引吗? LIKE 的一个问题是它可能需要进行表扫描。

标签: sql odbc sybase database-performance parameterized-query


【解决方案1】:

这是我的猜测,没有更多信息。

我在 SQL Server 上遇到过类似的问题。在 SQL Server 中,当表上的列是“varchar”并且参数化查询参数是“nvarchar”(反之亦然)时,这会导致 SQL Server 忽略可用索引,因为参数类型与索引类型不匹配,这反过来会导致表扫描。

同样的事情也可能发生在 Sybase 上。如果您可以看到生成的查询,则可以确认是否存在类型不匹配。

如果是这种情况,那么有两种解决方案

  • 显式设置参数的类型以匹配列类型
  • 更改列的类型以匹配正在生成的参数类型

【讨论】:

    【解决方案2】:

    米奇的建议是正确的。

    我必须更改连接字符串以使用 OLEDB 驱动程序,然后我可以设置选项:

    • 优化 Prepare=None
    • 选择方法=直接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多