我需要从表中检索一些与给定匹配的字段ID
。目前,我建立了一个sql语句
SELECT a, b, c
FROM d
WHERE id = @id
然后使用DataReader
.
我还可以编写一个采用id
as 参数的存储过程。
我想知道哪个对性能更友好。
编辑:我正在使用参数化查询,编辑问题以反映这一点。
我需要从表中检索一些与给定匹配的字段ID
。目前,我建立了一个sql语句
SELECT a, b, c
FROM d
WHERE id = @id
然后使用DataReader
.
我还可以编写一个采用id
as 参数的存储过程。
我想知道哪个对性能更友好。
编辑:我正在使用参数化查询,编辑问题以反映这一点。
他们通常会表现得几乎相同。
请注意,如果非常频繁地调用它,可能会出现差异;每次发送时都必须解析 SQL 代码(但如果语句被识别为被缓存,则不必重新编译),而 SP 是预编译的,但这会导致索引选择不理想,因为统计信息不会重新在每次通话中进行评估。
现代版本的 SQL Server 在性能方面几乎没有差异。动态构建 SQL 通常被认为是一种禁忌——你想使用参数化 SQL来避免 SQL 注入,但这和存储过程通常会提供相同的性能。
如果你使用prepared statements而不是通过连接字符串构建的sql语句,那么存储过程和prepared statement之间的性能没有区别。两者都在第一次运行时编译并缓存在 sql server 的查询计划中。
运行存储过程会更好,1)因为执行计划是提前编译并缓存的,2)您不会将数据库暴露于 sql 注入攻击。如果没有代码示例,就不可能说出您当前的操作方式,但我想您只是创建一个字符串并要求执行它,这将是一个坏主意。