使用django进行Postgres DB查询检索效率

时间:2012-04-17 16:48:43

标签: sql database django postgresql large-data-volumes

我在PostgreSql中有7个表与Django 1.3应用程序集成。在7个表中,我们将根据所有具有不同列数据的表中存在的名称访问。一些特定名称包含1,00,000行。所以,我的问题是我需要检索属于表中特定名称数据的所有行。

因此,我为检索操作实现了django模型orm查询集。但似乎没有效果。即使我进行了分页,也需要花费大量时间来加载页面,并为所有表创建所有列的索引。

我仍然在 nginx-504网关超时

所以,我需要优化查询,该查询应该从所有表中检索到1,00,000行。

改善查询优化需要哪些方法?

如何在django中进行此类具有挑战性的操作?

我在这里粘贴了我的代码http://pastebin.com/yNy5pxGG

请建议我正确的方向!

EDIT1:

我的查询:  http://pastebin.com/A9B2ExVk

TABLES:

 fda_sheet1 = 208778 unique rows
 fda_sheet2 = 291958 unique rows
 fda_sheet3 = 191958 unique rows
 fda_sheet4 = 676363 uniq rows
 fda_sheet5 = 262651
 fda_sheet6 = 742707
 fda_sheet7 = 300000

这些是我个人的表格和行数。我正在制作LEFT JOIN,以便为表演创建一个表格。

这也不好,因为该表的大小超过700GB。

处理查询的方法是什么?

备注

这些表包含各种级别的数据。主要是我们有药物名称和ISR编号。所有其他表格中都不存在ISR编号。基于药物,我们将获取ISR否并且也使用ISR否则我们将查询其他表中的其他数据。希望您了解瓶颈

所以,1。结合表也是问题,因为穿越700 GB

2.查询多个表也是问题因为每个表中的多行具有相同的isr no。

你认为还有其他最好的方法吗?

如果您有任何疑问,请告诉我

plz建议我们解决这个问题。

1 个答案:

答案 0 :(得分:1)

您在评估所有查询(将其投放到list)并创建total_data后进行分页。因此,在任何分页工作之前,需要检索所有数据并将其放入内存中。你应该避免这种情况。

另外,正如我所看到的,你有一个对象的数据分成7个不同的表 - 这对Django的ORM来说很糟糕。如果无法修改数据库模式,则可以尝试在数据库中创建一个视图,以通过将它们连接在一起来模拟一个宏表。

因此,所有加入和检查空字段都将在DB中完成,您将拥有更清晰的Python代码,并且它的工作速度会更快。