【问题标题】:Sorting in application vs sorting in DB在应用程序中排序与在数据库中排序
【发布时间】:2018-04-20 21:28:48
【问题描述】:

查询前 N 个结果时,我可以让 DB 对结果进行排序,或者我可以自己对结果进行排序。

我阅读了很多关于数据库相对于应用内排序的性能和内存优势的信息。但是,假设我编写了一个最佳排序代码,这两个选项的性能不相等吗? 两者都使用相同的 CPU,都可以分配线程,并且都可以在内存中分配更多空间来执行排序。

我在该主题中找到的所有答案都差不多 - 说 “让数据库去做吧,它会比你做得更好”,或者 “经验法则是在数据库中做任何事情,除非出现特定需求,例如复杂的排序......”

那么,为什么选择 DB 排序而不是应用内排序(除了通过不要求对数百万个表条目进行排序来节省网络带宽之外)?

【问题讨论】:

  • 在排序方面,您无法超越现代 dbms。
  • 你真的可以对应用程序中的十亿行进行排序以找到前 N 个吗?
  • Alyways 以 db 排序。
  • Top n 通常由 RDBMS 优化;例如。在 SQL Server 中,如果 n 小于 500,则不会进行完整排序。
  • @yuz:数据库经过优化,可以处理适合内存的数据。您的应用程序是否为此进行了优化?

标签: sql sorting database-performance


【解决方案1】:

应用排序需要传输所有数据,数据库排序只需传输 N 行!

数据库已经实现了最有效的排序算法。

如果索引已经存在,则DMBS可以返回top N而不对数据进行排序。

编辑:

如果您的数据集非常小,可以存储在内存客户端,然后您可以通过应用订购。如果您需要重新排序数据而不从数据库中刷新数据,这可能是一个很好的解决方案。

在其他情况下使用 DB 排序。

【讨论】:

  • 我已经在我的问题中提到了它。这是唯一的好处吗?
  • 一个 dbms 将使用索引(如果可用)。
  • 百万行的好处真的很大!
  • 这是引人注目的地方。这就像您在餐厅点了整个菜单,然后在家里从所有菜肴中挑选您的餐点。而不是:从菜单中挑选一餐,然后将其中一餐送到您家
  • 总结所有答案 - 好处是:(1)避免在网络中传输大量数据。 (2) 数据库系统使用索引来立即回答排序查询。 (3) 使用内存中排序时,您可以在给定时间在内存中保存最多 X 个元素。如果您的数据有超过 X 个元素(这经常发生),您需要实现自己的“内存不足”排序算法(即一次获取部分数据并将所有数据合并到一个排序输出,这非常困难),或者只使用针对此目的进行了优化的数据库排序机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2023-03-03
  • 2017-09-15
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多