sql - 在应用程序中排序与在数据库中排序

标签 sql sorting database-performance

当查询前 N 个结果时,我可以要求数据库对结果进行排序,或者我可以自己对它们进行排序。

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

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

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

最佳答案

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

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

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

编辑:

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

在其他情况下使用数据库排序。

关于sql - 在应用程序中排序与在数据库中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175553/

相关文章:

SQL:将时间间隔分割为一小时的交集

mysql - 删除MySQL中加号后面的所有内容

mysql - varchar的后果是什么?

php无法执行mysql查询转义

mysql - 获取列 a 和 b 的排列唯一的所有行

mysql - SQL 数据库转储/文本解析

Mysql 5.7.23 几个小时后变慢,需要重启

PostgreSQL 使用西里尔文排序 "ь"

java - 根据 HashMap 中 ArrayList<String> 的大小进行排序

mysql - 测验布局改进