为什么 Django ORM explain() 函数没有给出预期的输出?

Why is Django ORM explain() function not giving expected output?

我正在尝试了解 .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

= 'My Blog'::bpchar)

但是如果我尝试在本地 Django shell 中打印相同的内容,它会给我不同的输出,如下所示。

print(OCUser.objects.all().explain())

给予

SIMPLE alyssa_ocuser None ALL None None None None 2853 100.0 None

这与官方文档中的不相似。

我不确定这个 SIMPLE 以及所有那些 None 值是什么。有人可以解释一下吗?

当我过滤查询时,我得到如下结果。

print(OCUser.objects.filter(chain_code=110).explain(format='text'))

1 SIMPLE alyssa_ocuser None ALL None None None None 2853 10.0 Using where

我是不是做错了什么?

Python: 3.7.3
Django: 2.1.5
Mysql: Ver 14.14 Distrib 5.7.26

explain() 直译为原始 SQL EXPLAIN,它特定于我们正在使用的数据库。

在官方文档中,他们使用了 Postgres,而我使用的是 MySQL 数据库。

我得到了特定于 MySQL 的输出,它与 EXPLAIN SELECT * FROM TABLE_NAME 相同。