我有一个类似的查询
SELECT *
FROM myTable
WHERE key LIKE 'XYZ'
值“XYZ”由用户输入(可能包括 % 和 _)
如果我使用字符串连接构造查询,它将在 10 秒内运行。 但这是不安全的,我应该使用参数化查询。
因此,我使用 odbc 命令对象及其执行方法构建查询,并传递参数。
SELECT *
FROM myTable
WHERE key LIKE ?
不幸的是,参数化 SQL 执行方法需要整整一分钟。
此查询是深入/调查包中的众多查询之一,所有参数化查询(与字符串连接相比)都出现了类似的速度减慢情况。
如何找出时间都花在哪里(并解决它)?
最佳答案
这是我的猜测,没有更多信息。
我在 SQL Server 上也遇到过类似的问题。在 SQL Server 中,当表上的列为“varchar”并且参数化查询参数为“nvarchar”(反之亦然)时,这会导致 SQL Server 忽略可用索引,因为参数类型与索引类型不匹配,这会导致 SQL Server 忽略可用索引。进而导致表扫描。
Sybase 也可能会发生同样的情况。如果您可以看到生成的查询,则可以确认是否存在类型不匹配。
如果是这种情况,那么有两种解决方案
- 显式设置参数类型以匹配列类型
- 更改列的类型以匹配正在生成的参数类型
关于sql - 参数化 SQL 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9817539/