我有一个像
这样的查询SELECT *
FROM myTable
WHERE key LIKE 'XYZ'
用户输入值“XYZ”(可能包括%和_)
如果我使用字符串连接构造查询,它将在10秒内运行。 但这是不安全的,我应该使用参数化查询。
所以我使用odbc命令对象和它的execute方法构建查询,并传递参数。
SELECT *
FROM myTable
WHERE key LIKE ?
不幸的是,参数化的SQL执行方法需要一分钟。
这个查询是下钻/调查包中的众多查询之一,我对所有参数化查询也有类似的减速(与字符串连接相比)。
如何找出时间(并修复)?
答案 0 :(得分:2)
这是我的猜测,没有进一步的信息。
我在SQL Server上遇到过类似的问题。在SQL Server中,当您的表上的列是' varchar'参数化查询参数是' nvarchar' (反之亦然),这会导致SQL Server忽略可用的索引,因为参数类型与索引类型不匹配,从而导致表扫描。
Sybase可能会发生同样的事情。如果您可以看到生成的查询,则可以确认是否存在类型不匹配。
如果是这种情况,那么两个解决方案就是
答案 1 :(得分:0)
我不得不更改连接字符串以使用OLEDB驱动程序,然后我可以设置选项: