SQL查询-在SQL查询中按顺序排序或对列表排序<&燃气轮机;

SQL查询-在SQL查询中按顺序排序或对列表排序<&燃气轮机;,sql,sql-server,sql-order-by,query-performance,Sql,Sql Server,Sql Order By,Query Performance,我正在尝试改进一些SQL查询。 我正在将SQLServerManagementStudio 11与SQLServer2012一起使用。 我正在从事一个网络表单C#.Net(v4.5)项目 当我直接从SQLServerManagementStudio创建查询时,我可以使用“执行计划”来检查发生了什么 我查询的瓶颈是“orderby”。在请求之后直接从代码中对列表进行排序更好,还是应该继续使用SQL查询的“orderby” 谢谢这只是我个人的观点 我更喜欢用代码来做,因为你可以找到很多功能强大且快速

我正在尝试改进一些SQL查询。 我正在将SQLServerManagementStudio 11与SQLServer2012一起使用。 我正在从事一个网络表单C#.Net(v4.5)项目

当我直接从SQLServerManagementStudio创建查询时,我可以使用“执行计划”来检查发生了什么

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


谢谢

这只是我个人的观点

我更喜欢用代码来做,因为你可以找到很多功能强大且快速的排序算法


或者您可以使用LINQ(如果您使用的是C#),它非常强大,在一行代码中,您可以做任何您想做的事情,过滤、排序、获取x号等等。。这就是为什么我更喜欢用代码来做这件事。

这只是我个人的观点

我更喜欢用代码来做,因为你可以找到很多功能强大且快速的排序算法


或者您可以使用LINQ(如果您使用的是C#),它非常强大,在一行代码中,您可以做任何您想做的事情,过滤、排序、获取x号等等。。这就是为什么我更喜欢用代码来实现的原因。

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

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

您需要使用SQL Server对数据进行排序。SQL Server允许通过添加索引来优化性能,因此您可以调整性能MINCE W/O修改您的代码。LINQ(Objor)只是一种编程语言,是iQueDaby上的一组扩展方法。从性能的角度看,它不能靠近高度优化的RDBMS。如果

,您可以考虑在代码中对数据进行排序。
  • 您的数据集很小,在这种情况下,从性能角度来看,这并不重要
  • 您希望有意地将排序从繁忙的SQL服务器转移到另一个不太繁忙的服务器,可能是WEB服务器
  • 排序列的列表可能因请求而异,因此创建满足每个ORDERBY子句的索引是不切实际或不可能的
  • 您可以对缓存的数据集进行排序,这样您就不会因为再次选择数据而打扰SQL Server
  • 您使用高度定制的记录比较算法,这很难用SQL脚本表示

  • 如果只需要根据一组列进行排序,我建议重新考虑表中的聚集索引定义。但这种方法需要更好地分析对表执行的其他查询。

    您需要使用SQL Server对数据进行排序。SQL Server允许通过添加索引来优化性能,因此您可以调整性能W/O修改您的代码。LINQ(Objor)只是一种编程语言,是一种在iQueDaby上的扩展方法集。从性能的角度看,它不能靠近高度优化的RDBMS。您可以考虑在代码中对数据进行分类,如果

  • 您的数据集很小,在这种情况下,从性能角度来看,这并不重要
  • 您希望有意地将排序从繁忙的SQL服务器转移到另一个不太繁忙的服务器,可能是WEB服务器
  • 排序列的列表可能因请求而异,因此创建满足每个ORDERBY子句的索引是不切实际或不可能的
  • 您可以对缓存的数据集进行排序,这样您就不会因为再次选择数据而打扰SQL Server
  • 您使用高度定制的记录比较算法,这很难用SQL脚本表示

  • 如果您只需要基于一组列进行排序,我建议您重新考虑表中的聚集索引定义。但这种方法需要更好地分析针对表执行的其他查询。

    根据具体情况,我们需要您的模式和实际执行计划。但一般来说,您可以通过创建正在生成覆盖其列的索引执行计划建议我:“创建非聚集索引…”以改进我的查询。“查询处理器估计,实现以下索引可以将查询成本提高42.5394%。”我的视图与@Oscar相同。这非常安全。请注意,结果可能不同。ORDER BY将使用数据库中列的排序规则,而您的代码将遵循计算机的当前区域性。(当然,除非您指定其他区域性或排序规则)请注意,查询计划中指定的值有时可能会产生误导。这并不是因为一个部分占50%,它还负责一半的执行时间。您是否尝试过使用
    上设置统计时间进行运行;一次使用ORDER BY,一次不使用?Dependes,我们需要您的模式和实际执行计划。但一般来说l您可以通过创建覆盖其列的索引来加快订单的速度。执行计划建议我:“创建非聚集索引…”以改进我的查询。“查询处理器估计,实现以下索引c