Я пытаюсь понять, как работает функция .explain() в Джанго ОРМ.
Об этом говорится в официальной документации здесь.
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)
Но если я попытаюсь напечатать то же самое в моем локальном Джанго оболочка, это даст мне другой вывод, как показано ниже.
print(OCUser.objects.all().explain())
дает
SIMPLE alyssa_ocuser None ALL None None None None 2853 100.0 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
Документация, с другой стороны, имеет дело с базой данных PostgreSQL, как указано.
Обновлен вопрос с результатом отфильтрованного запроса. Могу ли я узнать, каковы эти значения None в Output?
:P это partitions, possible_keys, key, key_len и ref. Это столбцы результата EXPLAIN.
Хорошо-хорошо. Теперь я понял. Большое спасибо. :-)






explain() буквально переводится как необработанный SQL EXPLAIN, который специфичен для используемой нами базы данных.
В официальной документации они использовали Postgres, а я использовал MySQL DB.
Я получил вывод, специфичный для MySQL, такой же, как EXPLAIN SELECT * FROM TABLE_NAME.
Нет, это ожидаемый результат. По сути, это форматирование, которое вы получаете, когда пишете
EXPLAIN SELECT * FROM alyssa_ocuser;. Если фильтровать, то видимо план запроса другой.