【问题标题】:Optimizing database queries in Django在 Django 中优化数据库查询
【发布时间】:2012-11-25 23:53:33
【问题描述】:

我有一些代码导致我的页面加载速度很慢(128 毫秒内有 49 个查询)。这是我网站的着陆页——所以它需要快速加载。

以下是我的views.py,它在网站上创建了最新更新的提要,并导致我在调试工具栏中看到的加载时间最慢:

def product_feed(request):
    """ Return all site activity from friends, etc. """
    latestparts = Part.objects.all().prefetch_related('uniparts').order_by('-added')
    latestdesigns = Design.objects.all().order_by('-added')
    latest = list(latestparts) + list(latestdesigns)
    latestupdates = sorted (latest, key = lambda x: x.added, reverse = True)
    latestupdates = latestupdates [0:8]
    # only get the unique avatars that we need to put on the page so we're not pinging for images for each update
    uniqueusers = User.objects.filter(id__in = Part.objects.values_list('adder', flat=True))
    return render_to_response("homepage.html", {
    "uniqueusers": uniqueusers,
    "latestupdates": latestupdates
    }, context_instance=RequestContext(request))

导致时间最多的查询似乎是:

  latest = list(latestparts) + list(latestdesigns) (25ms)

我也在调查另一个分别是 17 毫秒(全站公告)和 25 毫秒(在每个产品提要项目上添加标记项目)的项目。

有没有人看到我可以优化我的活动提要加载的任何方法?

【问题讨论】:

    标签: django


    【解决方案1】:

    此外,我认为adderForeignKeyUser 的模型。

    Part.objects.distinct().values_list('adder', flat=True)
    

    上面的行是QuerySet,具有唯一的addre 值。我相信你确实说过。

    它可以节省你执行 subuery。

    【讨论】:

      【解决方案2】:

      在加快这些查询速度后,您可能需要查看memcache 以存储最常见的查询结果。

      【讨论】:

        【解决方案3】:

        您永远不需要超过 8 个项目,因此请限制您的查询。并且不要忘记确保added 在两个模型中is indexed

        latestparts = Part.objects.all().prefetch_related('uniparts').order_by('-added')[:8]
        latestdesigns = Design.objects.all().order_by('-added')[:8]
        

        对于加分,消除幻数。

        【讨论】:

        • 对不起,这里的菜鸟。 “限制查询”是什么意思。你所说的“幻数”是什么意思?我现在要研究索引以及它的作用/含义。
        • 哎呀,明白你说的第一个是什么意思了。
        猜你喜欢
        • 2019-03-30
        • 2018-10-23
        • 2014-12-22
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多