在处理大数据时,是什么使 temp tables 比 table 变量更有效?
What is that makes temp tables more efficient than table variables when working with large data?
在 SQL 服务器中,在处理大数据(比如插入或更新 100000 行)(参考:SQL Server Temp Table vs Table Variable Performance Testing)
我看过很多比较 temp table 和 table 变量的文章,但仍然不明白是什么让 temp tables 在处理大数据时更高效?仅仅是它们的设计行为方式还是其他什么?
Table variables
没有 statistics
,因此 table 变量的基数估计为 1。
您可以使用 recompile
选项强制至少纠正 cardinality estimation
,但您绝不能生成 column statistics
,即 [= 不存在列值的数据分布 temporary tables
.
后果很明显:每个使用 table variable
的查询都会 低估。
另一个骗局是这个:
Queries that insert into (or otherwise modify) @table_variables cannot
have a parallel plan, #temp_tables are not restricted in this manner.
您可以在这里阅读更多内容:
Parallelism with temp table but not table variable?
该主题的答案还有一个 link 补充阅读非常有帮助
在 SQL 服务器中,在处理大数据(比如插入或更新 100000 行)(参考:SQL Server Temp Table vs Table Variable Performance Testing)
我看过很多比较 temp table 和 table 变量的文章,但仍然不明白是什么让 temp tables 在处理大数据时更高效?仅仅是它们的设计行为方式还是其他什么?
Table variables
没有 statistics
,因此 table 变量的基数估计为 1。
您可以使用 recompile
选项强制至少纠正 cardinality estimation
,但您绝不能生成 column statistics
,即 [= 不存在列值的数据分布 temporary tables
.
后果很明显:每个使用 table variable
的查询都会 低估。
另一个骗局是这个:
Queries that insert into (or otherwise modify) @table_variables cannot have a parallel plan, #temp_tables are not restricted in this manner.
您可以在这里阅读更多内容:
Parallelism with temp table but not table variable?
该主题的答案还有一个 link 补充阅读非常有帮助