2

我有一个像这样的查询

SELECT *
FROM myTable
WHERE key LIKE 'XYZ'

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

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

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

SELECT *
FROM myTable
WHERE key LIKE ?

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

此查询是作为向下钻取/调查包的一部分的众多查询之一,并且所有参数化查询(与字符串连接相比)都有类似的减速。

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

4

2 回答 2

2

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

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

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

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

  • 显式设置参数的类型以匹配列类型
  • 更改列的类型以匹配正在生成的参数类型
于 2012-03-22T08:56:21.227 回答
0

米奇的建议是正确的。

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

  • 优化准备=无
  • 选择方法=直接
于 2012-04-05T07:41:24.913 回答