本文介绍 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
标志也可能导致数据更改。
相关用法
- Python Django QuerySet.exclude用法及代码示例
- Python Django QuerySet.exists用法及代码示例
- Python Django QuerySet.select_related用法及代码示例
- Python Django QuerySet.union用法及代码示例
- Python Django QuerySet.latest用法及代码示例
- Python Django QuerySet.values用法及代码示例
- Python Django QuerySet.intersection用法及代码示例
- Python Django QuerySet.get用法及代码示例
- Python Django QuerySet.none用法及代码示例
- Python Django QuerySet.get_or_create用法及代码示例
- Python Django QuerySet.update_or_create用法及代码示例
- Python Django QuerySet.prefetch_related用法及代码示例
- Python Django QuerySet.first用法及代码示例
- Python Django QuerySet.annotate用法及代码示例
- Python Django QuerySet.dates用法及代码示例
- Python Django QuerySet.values_list用法及代码示例
- Python Django QuerySet.select_for_update用法及代码示例
- Python Django QuerySet.order_by用法及代码示例
- Python Django QuerySet.bulk_update用法及代码示例
- Python Django QuerySet.in_bulk用法及代码示例
- Python Django QuerySet.defer用法及代码示例
- Python Django QuerySet.aggregate用法及代码示例
- Python Django QuerySet.reverse用法及代码示例
- Python Django QuerySet.count用法及代码示例
- Python Django QuerySet.create用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.query.QuerySet.explain。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。