我可以看到,手动将一个复杂的查询拆分到一个select [...] into #t链中,然后select [...] from #t [...]就会明显地更快了。这可能是由一个糟糕的设计造成的。
但是,如果SQL引擎/优化器认为这种临时表有用,那么它是否有可能使用它呢?
另外,如果我前面描述的手动拆分导致性能显著提高,是否意味着原始视图/底层表的设计存在明显缺陷?
发布于 2016-05-27 08:59:04
使用临时表链并不是一个糟糕的设计。它也不能保证你得到更好的表现。您应该考虑明智地使用临时表。有时它会提高性能,有时只会增加磁盘读/写。
在这种场景中,临时表的一个明显的用法是,将数据存储到临时表中,以消除慢查询的多次执行。这意味着,如果在代码中多次执行昂贵的查询,则应该考虑使用临时表并使用存储的数据,而不是在代码的多个位置执行查询。
另一种情况可能是使代码更容易理解和更容易阅读(如果性能不是问题的话)。
另一种情况是,您可以使用临时表向数据添加索引。在这种情况下,您可以将数据存储到临时表中,然后在其上创建索引以获得更好的读取性能。
通常,如果您不应该对只在代码中执行一次的查询使用临时表。
最后,Server使用临时表是为了自己使用,而不是存储数据的方式。因此,不要指望Server来执行您可能希望使用temp表进行的操作。
https://stackoverflow.com/questions/37479005
复制相似问题