【问题标题】:Django OptimiztionDjango 优化
【发布时间】:2013-02-01 09:56:27
【问题描述】:

我在 Django 中用原始 sql 编写了查询.. 假设将该查询的结果分配给变量 queryResult。

然后我循环这个 queryResult,然后使用 django ORM 从几乎三个表中检索数据。

例如..

for item in queryResult:
   a=table1.objects.get(id=item[0])
   b=table2.objects.get(id=item[1])
   c=table2.objects.get(id=item[2])
   z=a.result
   x=a.result1
   v=c.result

   ####based on some condition check the data is stored into a list as dictionary.

   recentDocsList.append({'PurchaseType':item[0],
                           'CaseName':z,
                           'DocketNumber':x, 
                           'CourtID':item[2],                             
                           'PacerCmecf':v,                              
                           'DID':item[3]})

完成循环后,这个rec​​entDocsList 被返回... 但整个事情是让我的页面呈现缓慢。谁有办法解决这个问题。

PS:整个事情都在一个while循环中。一次只能检索 50 个结果。如果检索到的结果小于 50 或 recentDocsList 长度等于 10。

提前致谢。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    不要过早优化 - 这会造成混淆。

    即使使用 SQLite3,您也应该能够提取 50 个链式查询集,而不会增加数据库的负担(升级到像 PostgreSQL 这样的更高性能的数据库会进一步改善这一点)。这表明您的问题在其他地方,要调试此尝试调用您的模型/查询/视图

    $ ./manage.py debugshell
    

    这将打印出您的 SQL 查询,以便您查看实际调用的内容。更好的是安装django-debug-toolbar,因为这会告诉您 SQL / 渲染速度下降的位置。

    但是!除非您有充分的理由这样做,否则 不要编写自定义 SQL 在 django 中执行 - ORM 几乎可以处理所有事情。自定义 SQL 的一些危险包括糟糕的性能 - 正如您可能正在经历的那样。

    此外 - 在性能敏感的地方(如页面渲染)中的 while 循环听起来像是一场等待发生的灾难 - 你确定不能以更安全的方式重写它吗?

    如果没有看到更多代码,就很难提供帮助 - 您的查询集有多大?他们有效率吗?你的表有索引吗? (如果你允许,Django 会提供这些,但听起来你在做一些不同的事情)。

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2011-11-24
      • 2011-10-08
      • 2017-05-12
      • 2012-03-19
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多