Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在服务器上排序还是在客户端排序?_Sql_Database_Performance_Sorting - Fatal编程技术网

Sql 在服务器上排序还是在客户端排序?

Sql 在服务器上排序还是在客户端排序?,sql,database,performance,sorting,Sql,Database,Performance,Sorting,我在工作中与一位同事讨论了SQL查询和排序。他认为,在将行返回给客户机之前,应该让服务器进行任何排序。另一方面,我认为服务器可能已经够忙了,让客户机在获取行之后处理排序肯定会提高性能 任何人哪种策略对多用户系统的整体性能最好?一般来说,您应该让数据库进行排序;如果它没有足够的资源来有效地处理这个问题,那么您需要升级数据库服务器 首先,数据库可能已经在您想要的字段上有了索引,因此按排序顺序检索数据可能很简单。第二,客户在获得所有结果之前无法对结果进行排序;如果服务器对结果进行排序,您可以一次处理一

我在工作中与一位同事讨论了SQL查询和排序。他认为,在将行返回给客户机之前,应该让服务器进行任何排序。另一方面,我认为服务器可能已经够忙了,让客户机在获取行之后处理排序肯定会提高性能


任何人哪种策略对多用户系统的整体性能最好?

一般来说,您应该让数据库进行排序;如果它没有足够的资源来有效地处理这个问题,那么您需要升级数据库服务器

首先,数据库可能已经在您想要的字段上有了索引,因此按排序顺序检索数据可能很简单。第二,客户在获得所有结果之前无法对结果进行排序;如果服务器对结果进行排序,您可以一次处理一行,已经排序。最后,数据库可能比客户机功能更强大,并且可以更有效地执行排序。

与往常一样,这取决于它:)

例如,如果您有一个将结果发送到表示层(无论是报表、网格等)的存储过程,那么使用哪种方法可能无关紧要

不过,我通常遇到的是具有排序功能的视图(例如,因为它们被报表直接使用),但也被其他视图或具有自己排序功能的其他过程使用


因此,作为一般规则,我鼓励其他人在有合理理由的情况下在客户端和服务器上进行所有排序。

这取决于。。。涉及寻呼吗?数据集的最大大小是多少?整个数据集是否需要始终以相同的方式进行排序?还是根据用户选择?或者,(如果涉及分页),是否只需要对客户端屏幕上单个页面中的记录进行排序?(通常不可接受)或者是否需要对整个数据集进行排序,并重新显示新排序集的第一页

与此排序操作的处理要求相比,客户端硬件的分布情况如何

底线是;这是总体用户体验(当然是根据成本衡量的),它应该控制您的决策。。。一般来说,客户端机器比服务器慢,可能会导致额外的延迟。。。 ... 但在初始页面加载之后,客户端请求额外自定义排序操作的频率如何?(客户机上已有的客户机数据种类比往返速度快得多…) 但在客户机上排序总是要求在初始加载时将整个数据集发送给客户机。。。这会延迟首字母页的显示。。这可能需要延迟加载、AJAX或其他技术复杂性来缓解


在服务器otoh上排序,会带来额外的可伸缩性问题,可能需要向服务器场添加更多的框来处理额外的负载。。。如果您正在以DB进行排序,并达到该阈值,则可能会变得复杂。(要在DB上扩展,您必须实施某种只读复制方案,或其他允许多台服务器(每个服务器都在处理)共享只读数据的解决方案)

我赞成罗伯茨的答案,但我想补充一点

我也喜欢在SQL Server中对数据进行排序,我曾在许多系统上工作过,这些系统都试图在客户端进行排序,而且在几乎所有情况下,我们都必须重新编写流程才能在SQL Server中进行排序。你可能会问这是为什么?我们有两个主要原因

  • 正在排序的数据量
  • 由于#1,需要实施适当的分页
  • 我们处理的界面会向用户显示非常大的数据集,利用SQL Server的强大功能处理排序和分页的性能要比在客户端执行要好得多


    为了说明这一点,在我们的环境中,从SQL Server端排序到客户端排序,两者都没有分页。客户端28秒使用XML进行排序,服务器端排序总加载时间为3秒。

    情况各不相同,衡量性能很重要

    有时很明显——如果你有一个大数据集,并且你对一小部分排序列表感兴趣(例如,在UI应用程序中分页)——在服务器上排序可以保存数据传输


    但通常您有一个DB和多个客户端,当客户端空闲时,DB可能会过载。客户端排序并不繁重,在这种情况下,它可以帮助您扩展。

    通常我同意上面所表达的观点,即服务器端排序通常是一种方式。但是,有时有理由进行客户端排序:

    • 排序标准可由用户选择或多种。在这种情况下,向表中添加一堆索引可能不是一个好主意,尤其是在需要考虑插入性能的情况下。如果很少使用某些排序标准,则索引不一定值得,因为插入的数量将超过选择的数量
    • 排序条件不能用纯SQL表示,也不能编制索引。这不一定是更快的客户端,但它需要服务器的负载

    需要记住的重要一点是,虽然在强大的客户端和服务器之间平衡负载在理论上可能是个好主意,但只有服务器可以维护一个索引,该索引在每次插入时都会更新。无论客户机做什么,它都是从一组未编入索引的未排序数据开始的。

    如果排序只是表面的,而客户机得到的是整个数据集,我倾向于让客户机处理它,因为它是关于演示的


    另外,比如在网格中,您可能必须在客户端实现排序,因为用户可能会通过单击列标题更改排序(不想让服务器再次检索所有信息)

    与任何其他性能相关的问题一样,universal answe
    SELECT TOP 1 price 
    FROM itemprice 
    WHERE ItemNumber = ? 
       AND effectivedate <= getdate() 
    ORDER BY effectivedate DESC