当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django QuerySet.explain用法及代码示例


本文介绍 django.db.models.query.QuerySet.explain 的用法。

声明

explain(format=None, **options)

返回 QuerySet 的执行计划的字符串,详细说明数据库将如何执行查询,包括将使用的任何索引或连接。了解这些细节可以帮助您提高慢查询的性能。

例如,当使用 PostgreSQL 时:

>>> 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)

数据库之间的输出差异很大。

explain() 受到除 Oracle 之外的所有内置数据库后端的支持,因为那里的实现并不简单。

format 参数更改数据库默认的输出格式,通常是基于文本的。 PostgreSQL 支持 'TEXT''JSON''YAML''XML' 格式。 MariaDB 和 MySQL 支持 'TEXT'(也称为 'TRADITIONAL' )和 'JSON' 格式。 MySQL 8.0.16+ 还支持改进的 'TREE' 格式,类似于 PostgreSQL 的 'TEXT' 输出,如果支持,默认使用。

一些数据库接受可以返回有关查询的更多信息的标志。将这些标志作为关键字参数传递。例如,当使用 PostgreSQL 时:

>>> print(Blog.objects.filter(title='My Blog').explain(verbose=True, analyze=True))
Seq Scan on public.blog  (cost=0.00..35.50 rows=10 width=12) (actual time=0.004..0.004 rows=10 loops=1)
  Output: id, title
  Filter: (blog.title = 'My Blog'::bpchar)
Planning time: 0.064 ms
Execution time: 0.058 ms

在某些数据库上,标志可能会导致执行查询,这可能会对您的数据库产生不利影响。例如,如果有触发器或调用函数,即使是 SELECT 查询,MariaDB、MySQL 8.0.18+ 和 PostgreSQL 支持的 ANALYZE 标志也可能导致数据更改。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.query.QuerySet.explain。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。