我有一个用 1692 行填充临时表的查询。我使用了一个表变量,但性能很糟糕。现在有所改善,但仍不理想。
但是,然后我需要将TaskName值拆分为单独的列。为此,我使用 APPLY(也许有更好的方法来做到这一点?)
执行计划返回超过 100,000的“实际行数”值。知道这是为什么吗?表中只有1692行!
查询计划如下。
https://www.brentozar.com/pastetheplan/?id=rJ6_JkKfQ
更新:尝试了来自@Biju jose 的 CASE 查询,但未提供所需的输出。
输出要求:
输出返回:
这是另一种 using
CASE
语句,请在运行前测试代码此外,估计的数字很高,因为您要加入同一个表 9 次,这会使行数膨胀。
表变量表现糟糕的原因是因为表变量没有统计信息。表变量可能很有用,但将它们与少量记录一起使用以避免性能问题。
聚集索引扫描中估计的行数是正确的;该统计数据没有问题。亚伦是对的(当然)。
以我的经验,Outer apply 也有一个非常方便的用例,但它使用得太频繁了(非常受欢迎,因为它是一个较新的功能......)。我见过的大多数情况最好使用(左)外部连接(当然还有最佳索引)。这通常会提供更好的性能。