使用SqlCommand.ExecuteScalar()时是否需要放置前1

时间:2017-02-17 09:58:54

标签: c# sql-server performance sqlcommand

我分析了SqlCommand的{​​{3}},看到它运行正常(请参阅CompleteExecuteScalar方法)。但我不确定我是否应该在查询中使用top 1。例如,我有select name from Person,表Person包含很多记录。我应该将qry修改为select top 1 name from Person吗?或者我可以保持qry原样,它不会影响性能/内存等?我担心服务器可以在输出之前缓冲一些数据。

2 个答案:

答案 0 :(得分:6)

如果您只想从数据库中获取一行,则无论您是通过TOP 1还是ExecuteScalar传递数据,都必须在查询中添加ExecuteReader

你不应该阅读源代码来得出这样的结论。事实上,实现方式命令受封装限制,调用类不应该根据命令的确切实现做出决定。

相反,我的想法是数据库是稀缺资源,应该在数据吞吐量和相关措施方面得到最佳利用。这包括向数据库指示只需要一行并完成它。让较低层(如命令实现和数据库本身)了解如何使用该信息以获得最佳性能。

答案 1 :(得分:2)

ExecuteScalar获取第一行的第一列值。因此,如果您在查询中添加TOP 1,则无法发挥作用。但是,如果您希望重复值并且需要一个特定值(为了速度),建议添加TOP 1。一个这样合理的场景是,您正在重用一些脚本,该脚本返回一组或多行,其中包含有关特定客户的客户信息,前提是您的第一列是CustomerID或任何主键。