在我目前的项目中,我必须将多个表(大约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.Ztable1和table2是大表格,其他是小表格。我在所有这些表中都有聚集索引,但性能仍然很低。因此,我想知道是否有什么我可以尝试提高性能。
p/s:我尝试在这些表中创建非聚集索引,但性能变得比以前低。
发布于 2013-07-17 11:02:45
最快的查询是,如果您对table1进行了反规范化,以便拆分出的规格化值实际上是表的一部分。
您可以尝试的另一个解决方案是构建一个临时表,它是其他20个小表的一个大集合。然后将该临时表重新加入到您的table1中。
发布于 2013-07-17 11:45:13
首先,您真的需要所有这些连接的数据吗?我认为大多数情况下你不需要。如果你需要,你可能需要检查你的需求和架构。
所以诀窍是,你只得到你想要的数据,而不是所有的数据。并尽可能早地过滤数据(甚至在加入下一个表之前。但不用担心,SQL Server会为您做一些优化)。
我会从用Ctrl+L检查执行计划开始,试着找出那些“索引扫描”节点并为它们建立索引。如果不看你的行刑计划我不能再往前走了。
https://stackoverflow.com/questions/17690290
复制相似问题