我对具有 33m 行的表的查询存在性能问题。查询应返回 6m 行。我试图在没有任何明显延迟的情况下实现对请求的响应。我的应用程序中的数据流需要它。启动后,数据传输可能需要更长的时间。困难在于查询有排序。因此,我创建了一个索引,其中包含在“order by”语句和“where”子句中使用的字段。
示例喜欢这样:
CREATE TABLE Table1 (
Id SERIAL PRIMARY KEY,
Field1 INT NOT NULL,
Field2 INT NOT NULL,
Field3 INT NOT NULL,
Field4 VARCHAR(200) NOT NULL,
CreateDate TIMESTAMP,
CloseDate TIMESTAMP NULL
);
CREATE INDEX IX_Table1_SomeIndex ON Table1 (Field2, Field4);
查询喜欢这样:
SELECT * FROM Table1 t
WHERE t.CreateDate >= '2020-01-01' AND t.CreateDate < '2021-01-01'
ORDER BY t.Field2, t.Field4
它导致以下结果:当我添加“LIMIT 1000”时,它会立即返回结果并构建以下计划: 带有“LIMIT”的计划
当我在没有“LIMIT”的情况下运行时,它会“思考”大约一分钟并返回数据大约 16 分钟。它构建了以下计划: 带有“LIMIT”的计划
为什么计划不同?
你能帮我立即制作souliton(没有限制)吗?
谢谢!