SQL查询 - 在SQL查询中排序或排序列表<>

时间:2014-03-10 14:17:31

标签: sql sql-server sql-order-by query-performance

我正在尝试改进一些SQL查询。 我正在使用SQL Server管理工作室11和SQL Server 2012。 我正在开发一个webform C#.Net(v4.5)项目。

当我直接从SQL Server管理工作室创建查询时,我可以使用“执行计划”来检查会发生什么。

我的查询瓶颈是“Order By”。最好是在请求后直接从代码中对列表进行排序,还是应该继续使用SQL查询的“Order By”?

由于

3 个答案:

答案 0 :(得分:2)

我认为最好使用SQL order by子句,最重要的原因是它将来不会削减您正在检索的数据的分页方式,并且您将能够轻松地检查“执行”计划“与排序结果相关的任何性能问题(就像您现在所做的那样)。如果要提高查询性能,请为order by子句包含的列创建索引 - 如果您不确定如何在大多数情况下执行此操作,则可以使用执行计划建议的索引。

答案 1 :(得分:1)

这只是我个人的观点。

我更喜欢在代码中执行此操作,因为您可以找到很多,功能强大且快速排序的算法。

或者您可以使用LINQ(如果您使用的是C#),它非常强大,并且在一行代码中,您可以执行任何操作,过滤,排序,获取x数字等。为什么我更喜欢用代码来做。

答案 2 :(得分:1)

您需要使用SQL Server对数据进行排序。 SQL Server允许通过添加索引来优化性能,因此您无需修改​​代码即可调整性能。 LINQ(对象)只是一种编程语言,是IEnumerable上的一组扩展方法。从性能角度来看,它无法与高度优化的RDBMS保持接近。如果

,您可以考虑在代码中对数据进行排序
  1. 您的数据集很小,在这种情况下从性能角度来看并不重要。
  2. 您希望故意将繁忙的SQL Server中的排序卸载到另一个不那么繁忙的服务器,可能是WEB服务器。
  3. 排序列的列表可能因请求而异,因此创建满足每个ORDER BY子句的索引是不切实际或不可能的
  4. 您可以对缓存的数据集进行排序,因此您不希望再次选择数据来打扰SQL Server。
  5. 您使用高度自定义的记录比较算法,很难用SQL脚本表达。
  6. 如果您只需要根据一组列进行排序,我建议您重新考虑表中的聚簇索引定义。但是这种方法需要更好地分析对表执行的其他查询。