【发布时间】:2019-06-04 10:19:02
【问题描述】:
我们遇到了特定 SQL 查询的性能问题,我们正在尝试找出如何改进这里。它的执行时间大约是 20 - 100 秒!
这是查询和解释:
SELECT "jobs".* FROM "jobs"
WHERE "jobs"."status" IN (1, 2, 3, 4)
ORDER BY "jobs"."due_date" ASC
LIMIT 5;
Limit (cost=0.42..1844.98 rows=5 width=2642) (actual time=16927.150..18151.643 rows=1 loops=1)
-> Index Scan using index_jobs_on_due_date on jobs (cost=0.42..1278647.41 rows=3466 width=2642) (actual time=16927.148..18151.641 rows=1 loops=1)
Filter: (status = ANY ('{1,2,3,4}'::integer[]))
Rows Removed by Filter: 595627
Planning time: 0.205 ms
Execution time: 18151.684 ms
我们在 AWS RDS 上使用 PostgreSQL 9.6.11。
在一个表中,我们有大约 500K 行。与查询相关的字段是:
- due_date(时间戳不带时区,可以为空)
- 状态(整数,非空)
我们有以下索引:
CREATE INDEX index_jobs_on_due_date ON public.jobs USING btree (due_date)
CREATE INDEX index_jobs_on_due_date_and_status ON public.jobs USING btree (due_date, status)
CREATE INDEX index_jobs_on_status ON public.jobs USING btree (status)
CREATE UNIQUE INDEX jobs_pkey ON public.jobs USING btree (id)
提前谢谢你, - 杰克
【问题讨论】:
标签: sql postgresql query-optimization sql-optimization