1

我需要从表中检索一些与给定匹配的字段ID。目前,我建立了一个sql语句

SELECT a, b, c 
FROM d 
WHERE id = @id

然后使用DataReader.

我还可以编写一个采用idas 参数的存储过程。

我想知道哪个对性能更友好。

编辑:我正在使用参数化查询,编辑问题以反映这一点。

4

4 回答 4

5

他们通常会表现得几乎相同。

请注意,如果非常频繁地调用它,可能会出现差异;每次发送时都必须解析 SQL 代码(但如果语句被识别为被缓存,则不必重新编译),而 SP 是预编译的,但这会导致索引选择不理想,因为统计信息不会重新在每次通话中进行评估。

于 2012-04-17T15:05:16.630 回答
4

现代版本的 SQL Server 在性能方面几乎没有差异。动态构建 SQL 通常被认为是一种禁忌——你想使用参数化 SQL来避免 SQL 注入,但这和存储过程通常会提供相同的性能。

于 2012-04-17T15:05:13.610 回答
1

如果你使用prepared statements而不是通过连接字符串构建的sql语句,那么存储过程和prepared statement之间的性能没有区别。两者都在第一次运行时编译并缓存在 sql server 的查询计划中。

于 2012-04-17T15:07:19.737 回答
-1

运行存储过程会更好,1)因为执行计划是提前编译并缓存的,2)您不会将数据库暴露于 sql 注入攻击。如果没有代码示例,就不可能说出您当前的操作方式,但我想您只是创建一个字符串并要求执行它,这将是一个坏主意

于 2012-04-17T15:05:39.740 回答