实际上,当我们通过java代码创建一个动态创建的SQL时,我有点卡住了这个问题,这意味着where子句中使用的字段列表中没有一致性把适当的指数放在一个巨大的延迟和性能损失。我们使用MSSql服务器作为历史数据的存储。目前300万条记录的总量肯定会增加。有没有办法来优化下面的SQL查询。任何帮助将非常感激,因为我不能添加索引到所有可能的字段组合,有10+。如何提高动态构建的性能SQL
SELECT
F_ID,
F_2,
F_3,..., F_15 FROM T_1 WHERE ~dynamically changed~
UNION ALL
SELECT
F_ID,
F_2,
F_3,..., F_15 FROM T_2 WHERE ~dynamically changed~
ORDER BY F_ID OFFSET 75 ROWS FETCH NEXT 25 ROWS ONLY`
`SELECT COUNT(*)
FROM (SELECT F_ID
FROM T_1
WHERE ~dynamically changed~
UNION ALL SELECT F_ID
FROM T_2
WHERE ~dynamically changed~) clause
现在我有唯一的索引〜聚集ID索引。它没有多大帮助。
当尝试过滤数据时,聚簇索引没有什么帮助。特别是当您试图通过任何不是(或部分)集群密钥的其他列过滤数据时。我建议你研究'〜动态更改的过滤器'中可能的列,并为这些列创建非聚簇索引。 SELECT SUM(CNT) FROM(SELECT COUNT(*)CNT FROM T_1 WHERE〜动态改变〜 UNION ALL SELECT COUNT(*)CNT - –
不知道的第一个查询,但是你可以重写为提高你的第二个查询 FROM T_2 WHERE〜动态变化〜)子句 –
@RahulRichhariya谢谢大家,我会尝试更新结果。 –