本文介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。