Sql 临时表和变量表在索引方面有什么区别吗?

Sql 临时表和变量表在索引方面有什么区别吗?,sql,sql-server,Sql,Sql Server,在表现上有什么不同吗 我基本上想知道哪个更快…可以在临时表上创建索引,但不能在变量表上创建索引。根据我的经验,临时表速度更快,生成的查询计划也更好。SQL server保留临时表的统计信息。您可以在var表上创建主索引和/或唯一索引,但它们用于强制唯一性。如果没有统计数据,我不认为SQLServer会使用索引进行搜索。2014年,SQL Server允许创建非主索引,我们必须查看它如何使用索引。您可以在临时表上创建索引,但不能在变量表上创建索引。根据我的经验,临时表速度更快,生成的查询计划也更好

在表现上有什么不同吗


我基本上想知道哪个更快…

可以在临时表上创建索引,但不能在变量表上创建索引。根据我的经验,临时表速度更快,生成的查询计划也更好。SQL server保留临时表的统计信息。您可以在var表上创建主索引和/或唯一索引,但它们用于强制唯一性。如果没有统计数据,我不认为SQLServer会使用索引进行搜索。2014年,SQL Server允许创建非主索引,我们必须查看它如何使用索引。

您可以在临时表上创建索引,但不能在变量表上创建索引。根据我的经验,临时表速度更快,生成的查询计划也更好。SQL server保留临时表的统计信息。您可以在var表上创建主索引和/或唯一索引,但它们用于强制唯一性。如果没有统计数据,我不认为SQLServer会使用索引进行搜索。2014年,SQL Server允许创建非主索引,我们必须查看它如何使用索引。

请看:人们遇到的最大问题是基数。查询引擎总是让表变量正好有一行,因此它可能不会选择最佳计划。请看:人们遇到的最大问题是基数。查询引擎总是让表变量正好有一行,因此它可能不会选择最佳方案。我假设2014年(以及更早的版本)会使用索引,但首先它必须知道有不止一行——有时SQL Server会有这些信息,但这在很大程度上是由于重新编译而发生的一种罕见情况。我假设2014年(以及更早的版本)使用索引,但首先它必须知道有不止一行——有时SQL Server可以拥有这些信息,但由于重新编译而发生的情况很少。
CREATE TABLE #Employee
(
   EmployeeID INT,
   Name VARCHAR(50),
   UNIQUE CLUSTERED (EmployeeID)
)

DECLARE @Employee TABLE
(
   EmployeeID INT,
   Name VARCHAR(50),
   UNIQUE CLUSTERED (EmployeeID)
)