为什么 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
相同。
我正在尝试了解 .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
相同。