SELECTINTO与WITHAS:在临时表方法中谁更快?
我对这两种结构有一点经验。使用一个或另一个使用临时表是否有性能改进?
- 我知道这
SELECT INTO会创建一个在查询后仍然存在并在一段时间后被删除的表。几秒钟后使用相同的查询时出现一些问题(SQL 错误 [2714] [S0001]: 数据库中已经有一个名为 #XXXXX 的对象)。因此,如果您以不同的方法使用该临时表进行大量查询,则无需再次创建该表。这是一个可以由不同用户在存在时使用的表,包括在内。 WITH AS只需在当前查询中创建临时表,然后立即删除。
我没有更多信息。
回答
你混淆了两个概念。
SELECT INTO创建一个新表。那可以是临时表或永久表。但是该表已创建。
WITH定义在单个查询中使用的公共表表达式(CTE)。这不是一张“桌子”。它只是一个子查询,可能会也可能不会具体化为临时表(实际上,SQL Server 通常不会具体化 CTE)。
SELECT INTO当你想要一张真正的桌子时,你可以使用。一些原因是:
- 在多个查询之间共享数据。
- 收集正确的统计信息以帮助查询优化器。
- 添加索引以提高后续查询性能。
当您需要查询中的命名子查询时,您可以使用 CTE。如果您在两者之间进行选择,您可能想从 CTE 开始。