我有两个使用一对一链接的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查询的速度?
答案 0 :(得分:0)
您在PostgreSQL表上创建了哪些索引?
在PostgreSQL中执行150万个对象的执行速度非常慢
这是数百万条记录中所期望的,是的。
这只是一个问题,如果您需要快速操作。 PostgreSQL和Django无法告诉您要快速执行哪些操作,因此默认情况下不会创建索引。
因此,因为您已经提出了问题,所以我们假设您希望该操作更快。一种方法是在写入记录时进行速度交换,在查询记录时进行速度交换。
您可以create an index on particular fields,将一些较慢的写操作换成更快的查询操作。 index will be used also when sorting with ORDER BY
。
如果只是想在Django模型的一个字段上创建索引一样简单,则db_index
field option会指定。