大家好,我对一些报告有几个查询,其中每个查询都从 35 个以上的表中提取数据。每个表都有近 10 万条记录。例如,所有查询都是 Union ALL
;With CTE
AS
(
Select col1, col2, col3 FROM Table1 WHERE Some_Condition
UNION ALL
Select col1, col2, col3 FROM Table2 WHERE Some_Condition
UNION ALL
Select col1, col2, col3 FROM Table3 WHERE Some_Condition
UNION ALL
Select col1, col2, col3 FROM Table4 WHERE Some_Condition
.
.
. And so on
)
SELECT col1, col2, col3 FROM CTE
ORDER BY col3 DESC
到目前为止,我只在 Dev Server 上测试了这个查询,我可以看到它需要一些时间才能得到结果。所有这 35 个以上的表都彼此不相关,这是我能想到的在结果集中获取所有所需数据的唯一方法。
有没有更好的方法来做这种查询?
如果这是进行此类查询的唯一方法,我如何通过在可能的情况下进行任何更改来提高此查询的性能?
我的意见
我不介意在这份报告中有一些脏读。我正在考虑使用查询提示 with nolock
或Transaction Isolation Level
设置为READ UNCOMMITED
.
这有什么帮助吗???
编辑
每个表都有 5-10 位列和每个位列的对应日期列,我对每个 SELECT 语句的条件类似于
WHERE BitColumn = 1 AND DateColumn IS NULL
同行建议
过滤索引
CREATE NONCLUSTERED INDEX IX_Table_Column
ON TableName(BitColumn)
WHERE BitColum = 1
包含列的过滤索引
CREATE NONCLUSTERED INDEX fIX_IX_Table_Column
ON TableName(BitColumn)
INCLUDE (DateColumn)
WHERE DateColumn IS NULL
这是最好的方法吗?或者有什么建议吗???