【发布时间】:2019-11-13 23:13:52
【问题描述】:
我试图了解.explain() 函数在 Django ORM 中的工作原理。
官方文档here是这么说的。
print(Blog.objects.filter(title='My Blog').explain())
给出以下输出。
Seq Scan on blog (cost=0.00..35.50 rows=10 width=12) Filter: (title
= '我的博客'::bpchar)
但是,如果我尝试在本地 Django shell 中打印相同的内容,则会得到不同的输出,如下所示。
print(OCUser.objects.all().explain())
给予
简单 alyssa_ocuser 无 全部 无 无 无 无 2853 100.0 无
与官方文档中的不相似。
我不确定这个 SIMPLE 以及所有那些 None 值是什么。谁能解释一下?
当我过滤查询时,我得到如下。
print(OCUser.objects.filter(chain_code=110).explain(format='text'))
1 SIMPLE alyssa_ocuser 无 全部 无 无 无 无 2853 10.0 使用 在哪里
我做错了吗?
Python: 3.7.3
Django: 2.1.5
Mysql: Ver 14.14 Distrib 5.7.26
【问题讨论】:
-
不,这是预期的输出。它本质上是您在编写
EXPLAIN SELECT * FROM alyssa_ocuser;时获得的格式。如果你过滤,那么显然查询计划是不同的。 -
另一方面,文档处理的是 PostgreSQL 数据库,如指定的那样。
-
用过滤后的查询结果更新了问题。我可以知道 Output 中的那些 None 值是什么吗?
-
:P 这些是
partitions、possible_keys、key、key_len和ref。这些是EXPLAIN结果的列。 -
好吧好吧。现在我知道了。太感谢了。 :-)
标签: python django python-3.x django-models django-orm