Почему функция объяснения () Django ORM не дает ожидаемого результата?

Я пытаюсь понять, как работает функция .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

Нет, это ожидаемый результат. По сути, это форматирование, которое вы получаете, когда пишете EXPLAIN SELECT * FROM alyssa_ocuser;. Если фильтровать, то видимо план запроса другой.

Willem Van Onsem 03.07.2019 11:39

Документация, с другой стороны, имеет дело с базой данных PostgreSQL, как указано.

Willem Van Onsem 03.07.2019 11:41

Обновлен вопрос с результатом отфильтрованного запроса. Могу ли я узнать, каковы эти значения None в Output?

Underoos 03.07.2019 11:43

:P это partitions, possible_keys, key, key_len и ref. Это столбцы результата EXPLAIN.

Willem Van Onsem 03.07.2019 11:44

Хорошо-хорошо. Теперь я понял. Большое спасибо. :-)

Underoos 03.07.2019 11:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
550
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

explain() буквально переводится как необработанный SQL EXPLAIN, который специфичен для используемой нами базы данных.

В официальной документации они использовали Postgres, а я использовал MySQL DB.

Я получил вывод, специфичный для MySQL, такой же, как EXPLAIN SELECT * FROM TABLE_NAME.

Другие вопросы по теме