当前位置: 首页 > 面试题库 >

在应用程序层或使用order by子句对数据进行排序是否更好?

翟善
2023-03-14
问题内容

很久以前,建议我在应用程序层对数据进行排序,而不要ORDER BY在SQL中使用该子句。原因是.Net将更有效地对SQL引擎进行排序。

与我所遇到的SSIS最佳实践相矛盾的是,它建议在SQL中对数据进行排序(如果可以的话),并避免进行Sort转换。

SSIS的建议对我来说很有意义。因此,现在我想知道避免这种情况的最初建议ORDER BY是否是虚假的。

给定一个不太复杂的查询,ORDER BY是否一定意味着性能受到影响?

谢谢。


问题答案:

首先,如果您真的想了解一组给定的数据,则应该对其进行测试。

就是说,有几个原因使我认为您应该在服务器端进行排序。

首先,服务器可以利用更多硬件(多个线程,多个磁盘,多个处理器)进行排序。这可以对性能产生很大的影响。

其次,排序可能不是必需的。在某些情况下,查询实际上不必对结果进行排序,因为它们已经被排序。例如,可以基于排序的索引来返回结果。

第三,内存使用问题和内存泄漏往往在客户端更为普遍。(好吧,您并不是说您正在使用Java,因此您对此有些放心。)数据库服务器知道如何管理内存。

第四,我认为在服务器端进行数据操作是一个好主意。如果您尝试对每个操作进行微优化,则编码会变得非常复杂,其中一些操作在服务器上,而某些操作在客户端上。除非与数据表示特别相关,否则请在服务器上进行操作。

话虽如此,如果您只是为了在单个页面上进行演示而对20个项目进行排序,那么这并没有什么不同。如果您愿意,可以在客户端进行操作。



 类似资料:
  • 问题内容: 我正在阅读有关MapReduce的内容,以下内容使我感到困惑。 假设我们有一个包含一百万个条目(整数)的文件,并且我们想使用MapReduce对它们进行排序。我了解的处理方式如下: 编写一个对整数排序的映射器函数。因此,框架会将输入文件分为多个块,并将它们分配给不同的映射器。每个映射器将彼此独立地对数据块进行排序。完成所有映射器后,我们会将其每个结果传递给Reducer,它将合并结果并

  • 我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明

  • 返回按属性(props)和顺序(orders)排序的对象数组。 在默认值为 0 的 props 数组上使用 Array.sort(),Array.reduce(),根据传递的顺序使用数组解构来交换属性位置。 如果没有传递 orders 数组,那么默认情况下它会按 'asc' 排序(升序) 。 const orderBy = (arr, props, orders) => [...arr].so

  • 问题内容: 如果排序列上有索引,排序是否使用mysql索引?索引还用于其他什么用途? 它对列的组合索引和单独索引有什么区别? 问题答案: 是的,当按排序列排序时,MySQL使用索引对信息进行排序。 另外,如果在添加到 SELECT 子句的所有列中都有索引,则MySQL不会从表本身加载数据,而是从索引加载数据(更快)。 合并和单独的索引之间的区别是,MySQL不能使用超过 一个 每次查询索引,因此,

  • 问题内容: 我想请您帮我解决以 封闭表 形式存储的分层数据结构的排序问题。 我想使用这种结构来存储我的网站菜单。一切工作正常,但问题是我不知道 如何按 自定义顺序 对确切的子树 进行排序。目前,树已按照项目添加到数据库的顺序进行排序。 我的结构基于Bill Karwin的有关闭包表的文章和其他一些文章。 这是带有一些DEMO数据的MySQL数据库结构: 这是我对一棵树的SELECT查询: 对于__

  • 我想更改我的应用程序的徽标,但我不知道应该使用什么格式。例如,当我的徽标是苹果徽标时。我应该使用带有背景色的jpeg文件,还是应该只使用苹果的png文件,然后再添加背景色?