【发布时间】:2021-01-14 14:45:45
【问题描述】:
我正在使用 Python、Django 和 PostgreSQL 进行应用程序开发。我的数据库有数百万条记录,我必须使用这些数据实时(运行时)生成报告。在生成这些报告时,应用程序会超时并且无法生成报告。如果数据在 50k 左右,它正在生成一个 excel 文件,但是当数据为数百万时,查询将无法运行。
通过 Django Model 或 PostgreSQL Index 实现 Index 的最佳方式是什么?
请帮助我优化查询以使其更快。
版本
PostgreSQL 13.1,由 Visual C++ build 1914 编译,64 位
EXPLAIN (ANALYZE,BUFFERS)
SELECT
V."MERCHANT_ID",
V."ACCOUNT_NUMBER",
V."GIFT_LIST_REF",
( SELECT "store_id" FROM vd_store_master WHERE "store_id" = V."GIFT_LIST_REF" ) AS owingin_store_id,
( SELECT "store_name" FROM vd_store_master WHERE "store_id" = V."GIFT_LIST_REF" ) AS owingin_store_name,
( SELECT "franchisee_id" FROM vd_store_master WHERE "store_id" = V."GIFT_LIST_REF" ) AS owingin_franchisee_id,
( SELECT "franchisee_name" FROM vd_franchisee WHERE "franchisee_id" = ( SELECT "franchisee_id" FROM vd_store_master WHERE store_id = V."GIFT_LIST_REF" ) ) AS owingin_franchisee_name,
( SELECT "merchant_name" FROM vd_merchant_master WHERE merchant_id = V."MERCHANT_ID" ) AS merchant_name
FROM
vdaccount_card_assign V
WHERE
"MERCHANT_ID" = '003561002966107'
AND "CARD_STATUS" = 'D'
"QUERY PLAN"
"Seq Scan on vdaccount_card_assign v (cost=0.00..2056093.85 rows=149948 width=1362) (actual time=0.144..7171.425 rows=154405 loops=1)"
【问题讨论】:
-
从 MERCHANT_ID 上的索引和与 GIFT_LIST_REF 相关的所有列开始。但是查询看起来也有点奇怪:为什么所有这些子选择?
-
嗨,@FrankHeikens 感谢您的回复!所有这些 Sub Select 因为我们从多个表中获取数据。
标签: python django postgresql