Django 查看响应时间问题

标签 django django-views

嗨,我有很多从查询中获得的对象,查询集尚未评估,当我将 objectlist 传递给分页器对象时,返回分页器对象需要 14 秒,这是因为它正在评估列表中的所有对象,这需要时间(打分贝可能是)。

在将查询集发送到分页器对象之前,我强行评估了它:

ds_objects = list(ds_objects)

猜猜现在分页在返回对象中花费了 0.0 秒,但现在问题仍然存在,所有时间都由 ds_objects = list(ds_objects) 占用,我该如何有效地做到这一点,以便我的 View 响应时间减少到 2 或 3 秒?我还没有找到任何最佳解决方案:s

最佳答案

我的猜测是 JOIN (所以 select_related )对查询速度并不重要。无论如何,当你做一个 values()查询你真的不需要 select_related因为您将获得的唯一字段是指定为 values() 的字段参数,它们无论如何都由 JOIN 检索。

要了解为什么需要这么长时间,您可以执行以下操作:

打印出“原始 sql”

print tbl_action_log.objects.order_by('-TicketID', '-ActionLogID').query

修改它(它实际上不是 SQL,但它应该足够接近)以在 SQL 客户端中运行,例如 django 自己的 manage.py dbshell .

执行它,注意时间。然后执行 EXPLAIN ... (将您的查询放在点中),您可能会看到一些“全表扫描”消息

在受影响的列上向数据库表添加适当的索引,然后再次执行查询。索引可能是这样的:
CREATE INDEX idx_action_log_on_tkid_logid ON tbl_action_log (TicketID, ActionLogID);

当您对索引感到满意时,将其创建命令存储在
文件 app/sql/modelname.sql ,这将在任何新部署中创建索引。

关于Django 查看响应时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7008249/

相关文章:

python - Django 模型 : managing transactions when commit_manually is deprecated

jquery - 405 (METHOD NOT ALLOWED) for ajax request with django

mysql - (2006, 'MySQL server has gone away') 在 WSGI django

python - 如何将图像从 URL 传递到 Django 模板?

django - uwsgi:无法识别的选项 '--module=MyProject.wsgi:application'

python - 在 Django 中使用对象管理器或游标对象调用存储过程 - 原始 SQL 查询哪个更好?

python - 如何使用 Django 循环标签

django - 对模板中的对象进行排序

django - 我尝试在CreateView中授予权限

javascript - 错误: Key not found in QueryDict