sql - 参数化 SQL 的性能

标签 sql odbc sybase database-performance parameterized-query

我有一个类似的查询

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/

相关文章:

c# - 什么时候写 "ad hoc sql"比存储过程更好

mysql - 多对多关系与级联或设置空删除?

c - 无法使用 ODBC 连接到 Oracle 10g 快捷版

postgresql - ODBC/JDBC 代理到 Postgresql

c++ - afxdb.h 错误?

perl - DBI::Sybase 数据转换导致溢出

database - 为什么 SAP IQ 加载表选项比 Interactive SQL 中的导入向导更快?

php - 如何从另外两个表创建派生表?

mysql - 如何在自连接中编写随行的当前迭代而变化的条件

java - 提高批量插入的 JDBC 性能