當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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