在Python或PostgreSQL中处理数据是否更快,内存效率更高?

时间:2020-06-14 09:54:51

标签: python sql postgresql psycopg2

说我有一个具有5-6列和几百行的PostgreSQL表。使用psycopg2将 entire 表加载到我的Python程序中并使用Python选择我想要的行并根据需要对行进行排序会更有效吗?或者使用SQL选择所需的行,对其进行排序,然后仅将这些特定的行加载到我的Python程序中会更有效。

“有效”是指:

  1. 内存使用情况。
  2. 速度。

此外,这些因素将随着表格大小的增加而开始变化?说,表现在有几百万行了?

2 个答案:

答案 0 :(得分:3)

在PostgreSQL中执行所有这些操作几乎总是会更快。这些数据库系统经过精心设计,可以很好地扩展以处理大量数据,并针对其典型用例进行了高度优化。例如,他们不必从磁盘加载所有数据即可执行最基本的过滤器 [1]

即使不是这种情况,仅网络延迟/使用情况就足以平衡这一点,尤其是在您经常运行查询的情况下。

答案 1 :(得分:2)

实际上,如果将已经加载到内存中的数据与从数据库中检索到的数据进行比较,则内存中操作通常会更快。数据库有开销:

  • 它们位于同一服务器或不同服务器上的单独进程中,因此数据和命令需要在它们之间移动。
  • 查询需要解析和优化。
  • 数据库支持多个用户,因此其他工作可能正在消耗资源。
  • 数据库维护ACID属性和数据完整性,这会增加额外的开销。

与每个查询的等效内存操作相比,其中的前两个特别增加了开销。

这并不意味着数据库没有优势,尤其是对于复杂的查询:

  • 它们实现了多种不同的算法,并具有优化器来选择最佳算法。
  • 他们可以利用更多资源-尤其是通过并行运行。
  • 他们可以(有时)缓存结果,从而节省大量时间。

数据库的优点不是它们始终提供最佳性能。优点是它们可以通过简单的界面在各种请求中提供 good 性能(即使您不喜欢SQL,我认为您也需要承认它更简单,更简洁,并且可以更灵活地使用第三代语言编写代码。

此外,数据库通过ACID属性和其他支持数据完整性的机制来保护数据。

相关问题