我可以看到,手动将复杂查询拆分为类型链select [...] into #t
然后select [...] from #t [...]
会明显加快速度。它可能是由糟糕的设计引起的。
但是,如果SQL引擎/优化器认为它有用,是否有可能使用这样的临时表?
另外,如果我上面描述的那种手动分割导致显着的性能提升,是否意味着原始视图/基础表的设计存在明显缺陷?
答案 0 :(得分:0)
使用临时表链并不是一个糟糕的设计。它也不保证你获得更好的表现。你应该考虑明智地使用临时表。有时它会提高性能,有时它只会增加磁盘的读/写速度。
在这种情况下临时表的一个显而易见的用法是,将数据存储到临时表中以消除慢速查询的多次执行。通过这种方式,如果您在代码中多次执行昂贵的查询,则应考虑使用临时表并使用存储的数据,而不是在代码的多个位置执行查询。
另一种情况可能是因为使代码更容易理解和更容易阅读(如果性能不是问题)
另一种情况是,您使用临时表来为数据添加索引。在这种情况下,您将数据存储到临时表中,然后在其上创建索引以获得更好的读取性能。
通常,如果您不应将临时表用于在代码中只执行一次的查询。
最后,SQL Server使用临时表来自行使用,而不是您想要存储数据的方式。所以不要依靠SQL Server来做,你可能想用temp table做什么。