簡體   English   中英

在Django PostgreSQL中排序太慢

[英]Sorting in Django PostgreSQL is too slow

我有兩個使用一對一鏈接的Django模型。 Django生成了此查詢,用於對ChangeList中的對象進行排序和限制(PER_PAGE = 20):

SELECT
    "test_model_object"."id", 
    "test_model_object"."sorting_field_asc", 
    "test_model_object"."sorting_field_desc", 
    ... about fifteen fields ...
    "test_model_one_to_one_element"."id", 
    "test_model_one_to_one_element"."number"

FROM "test_model_object" 

INNER JOIN "test_model_one_to_one_element" 
    ON ("test_model_object"."test_model_one_to_one_element_id" = "test_model_one_to_one_element"."id") 

ORDER BY "test_model_object"."sorting_field_asc" ASC, "test_model_object"."sorting_field_desc" DESC LIMIT 20;

但是在PostgreSQL中,對於150萬個對象(大約六秒鍾),執行速度非常慢。 我以為uuid對排序過程進行了一些不必要的調整,但是具有int索引的測試模型表明不是這樣。 有什么解決方案(可能是postgres設置)可以加快Django PostgreSQL查詢的速度?

您在PostgreSQL表上創建了哪些索引?

PostgreSQL中150萬個對象的執行速度非常慢

是的,這在數百萬條記錄中是可以預期的。

僅當您需要快速操作時,這才是問題。 PostgreSQL和Django無法告訴您要快速執行哪些操作,因此默認情況下不會創建索引。

因此,因為您已經提出了問題,所以我們假設您希望該操作更快。 一種方法是在寫入記錄時進行速度交換,在查詢記錄時進行速度交換。

您可以在特定字段上創建索引 ,作為將一些較慢的寫操作換為較快的查詢操作的一種方式。 使用ORDER BY排序時,也會使用索引

如果想在Django模型的一個字段上創建索引那樣簡單,則db_index字段選項會指定該索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM