Django 运行缓慢的原因
Posted
技术标签:
【中文标题】Django 运行缓慢的原因【英文标题】:Reasons why Django was slow 【发布时间】:2014-09-16 06:08:03 【问题描述】:这只是一个好奇的问题。我有一个脚本可以加载特定的查询集而不对其进行评估,然后打印count()
。我知道计数必须经过,因此取决于大小可能需要一些时间,但是 花了一分钟多的时间才返回 0 作为空查询集的计数 为什么要花这么长时间?是 Django 还是我的服务器?
注释:
查询集都是一种类型。
【问题讨论】:
【参考方案1】:这完全取决于您正在运行的查询。如果你在一个有十行的表上运行SELECT COUNT(*) FROM foo
,它会非常快;但是,如果您的查询涉及十几个未索引行的连接、子选择、过滤器——或者如果目标表只是有很多行——则查询可能需要任意时间。很可能,瓶颈不是 Django(尽管它的 ORM 有一些怪癖),而是数据库和您的查询。仅仅因为没有行符合条件并不意味着数据库不需要处理表中的其他行。
【讨论】:
有道理!但即使 QS 是空的? 查询集无关。想想看电话簿;您可能会寻找电话号码 901-555-1281,但永远找不到。但是,如果您正在查看怀俄明州夏延的电话簿,这将比查看纽约的电话簿要快得多......即使两个“查询集”都是空的。 好的,所以我的查询很复杂,我会看看我是否可以简化它并得到类似的结果。谢谢! 如果在简化后有助于查看查询类型,它是 Model.filter(fkrelation__m2mrelation__in = list)。似乎还需要一段时间,但我认为这种类型的查询还不错 遗憾的是,这并没有说太多。您可能必须查看生成的 SQL,并可能在其上运行数据库的查询计划器。 (如果您使用 Postgres,explain
会很有帮助。)以上是关于Django 运行缓慢的原因的主要内容,如果未能解决你的问题,请参考以下文章
Xcode Time Profiler 的详细信息面板显示“main”是应用程序运行缓慢的原因,但没有在其中显示单独的方法调用。