1

在我目前的项目中,我必须将多个表(大约 10->20 个表)连接在一起。在这些表中,大约有 1->3 个具有数百万行的大表(最多:8000 万行),另一个表最多只有数千行。

目前,我的查询是这样的:

SELECT *
FROM table1 left join table2 on table1.A=table2.A
table1 left join table3 on table1.B=table3.B
table1 left join table4 on table1.C=table4.C
table1 left join table5 on table1.D=table5.D
....
table1 left join table15 on table1.Z=table15.Z

table1 和 table2 是大表,其他都是小表。我在所有这些表中都有聚集索引,但性能仍然很低。所以,我想知道是否有什么可以尝试提高性能的。

p/s:我尝试在这些表中创建非聚集索引,但性能变得比以前低。

4

2 回答 2

0

那么最快的查询将是如果您对 table1 进行反规范化,以便拆分出的规范化值实际上是表的一部分。

您可能会尝试的另一个解决方案是构建一个临时表,该表是其他 20 个小表的一个大集合。然后只需将该临时表加入到您的 table1 中。

于 2013-07-17T03:02:44.570 回答
-1

首先,你真的需要所有这些连接的数据吗?我想大多数情况下你都没有。如果这样做,您可能需要检查您的需求和架构。

所以诀窍是,你只得到你想要的数据,而不是全部。并尽早过滤数据(甚至在加入下一张表之前。但不用担心,SQL Server 会为您做一些优化)。

我将从使用 Ctrl+L 检查执行计划开始。尝试找出那些“索引扫描”节点并为它们建立索引。没有看到你的执行计划,我不能再进一步了。

于 2013-07-17T03:45:12.867 回答