在应用程序中排序与在数据库中排序
Sorting in application vs sorting in DB
当查询前N个结果时,我可以要求数据库对结果进行排序,或者我可以自己对结果进行排序。
我读了很多关于数据库相对于应用程序内排序的性能和内存优势的文章。但是,假设我编写了最佳排序代码,那么这两个选项的性能不都一样吗?
两者都使用相同的 CPU,都可以分配线程,并且都可以在内存中分配更多 space 来执行排序。
我在该主题中找到的所有答案都大同小异 - 说
"just let the DB do it, it will do it better than you",或
"the rule of thumb is do anything in the DB unless a specific need arises such as complex sorts..."
那么,为什么选择数据库排序而不是应用程序内排序(除了通过不要求数百万 table 条目进行排序来节省网络带宽)?
对于应用程序排序,您需要传输所有数据,对于数据库排序,您只需要传输 N 行!
数据库实现已经是最高效的排序算法。
如果索引已经存在,DMBS 可以return top N 而无需对数据进行排序。
编辑:
如果你的数据集很小,可以放在客户端的内存中,然后通过app进行排序。如果您需要重新排序数据而不刷新数据库中的数据,这可能是一个很好的解决方案。
在其他情况下使用数据库排序。
当查询前N个结果时,我可以要求数据库对结果进行排序,或者我可以自己对结果进行排序。
我读了很多关于数据库相对于应用程序内排序的性能和内存优势的文章。但是,假设我编写了最佳排序代码,那么这两个选项的性能不都一样吗? 两者都使用相同的 CPU,都可以分配线程,并且都可以在内存中分配更多 space 来执行排序。
我在该主题中找到的所有答案都大同小异 - 说 "just let the DB do it, it will do it better than you",或 "the rule of thumb is do anything in the DB unless a specific need arises such as complex sorts..."
那么,为什么选择数据库排序而不是应用程序内排序(除了通过不要求数百万 table 条目进行排序来节省网络带宽)?
对于应用程序排序,您需要传输所有数据,对于数据库排序,您只需要传输 N 行!
数据库实现已经是最高效的排序算法。
如果索引已经存在,DMBS 可以return top N 而无需对数据进行排序。
编辑:
如果你的数据集很小,可以放在客户端的内存中,然后通过app进行排序。如果您需要重新排序数据而不刷新数据库中的数据,这可能是一个很好的解决方案。
在其他情况下使用数据库排序。