参数化SQL的性能

时间:2012-03-22 06:36:19

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

我有一个像

这样的查询
SELECT *
FROM myTable
WHERE key LIKE 'XYZ'

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

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

所以我使用odbc命令对象和它的execute方法构建查询,并传递参数。

SELECT *
FROM myTable
WHERE key LIKE ?

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

这个查询是下钻/调查包中的众多查询之一,我对所有参数化查询也有类似的减速(与字符串连接相比)。

如何找出时间(并修复)?

2 个答案:

答案 0 :(得分:2)

这是我的猜测,没有进一步的信息。

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

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

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

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

答案 1 :(得分:0)

米奇有正确的建议。

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

  • 优化准备=无
  • 选择方法=直接