Azure SQL 数据仓库中临时表的索引
Indexing on temporary tables in Azure SQL Data Warehouse
Azure SQL 数据仓库是否支持临时 table 上的任何索引? https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-temporary.
中未提及该限制
在一次尝试中,我收到了:
Cannot create a non-clustered index on a temporary table.
该措辞是否意味着聚集索引可以放置在临时 table 上?
临时表支持聚簇索引。例如:
CREATE TABLE #temp_table
(
c1 integer
,c2 integer
)
WITH ( CLUSTERED INDEX (c1 ASC) )
;
在我的一个项目中使用临时 tables,在多个列上有索引,并且可以选择向它们添加新列,这对我来说非常重要。 (临时 tables 也不支持 ALTER TABLE)。标准 table 不是选项,因为每个查询 运行 必须有自己的 table.
最后,我使用了一些可以用作临时table但实际上不是临时table的东西。我正在创建一个标准 table 但使用 Guid 作为名称并将名称分配给变量。因此,我使用的不是#TempTable,而是@MySemiTempTable,但这仅适用于生成的代码。所以我必须 运行 该代码使用 sp_executesql。下面的例子:
declare @MySemiTempTable NVARCHAR(MAX)
declare @sql NVARCHAR(MAX)
set @MySemiTempTable = 'TMP_' + CAST(NEWID () AS NVARCHAR(37))
set @sql = 'CREATE TABLE ['+ @MySemiTempTable + '] (Column1 [int], Column2 NVARCHAR(50))'
EXECUTE sp_executesql @sql
set @sql = 'INSERT INTO ['+ @MySemiTempTable + '] VALUES (1, ''test1'')'
EXECUTE sp_executesql @sql
set @sql = 'create unique index column1 on ['+ @MySemiTempTable + '] (column1)'
EXECUTE sp_executesql @sql
set @sql = 'select * from ['+ @MySemiTempTable + '] '
EXECUTE sp_executesql @sql
set @sql = 'drop table ['+ @MySemiTempTable + '] '
EXECUTE sp_executesql @sql
Azure SQL 数据仓库是否支持临时 table 上的任何索引? https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-temporary.
中未提及该限制在一次尝试中,我收到了:
Cannot create a non-clustered index on a temporary table.
该措辞是否意味着聚集索引可以放置在临时 table 上?
临时表支持聚簇索引。例如:
CREATE TABLE #temp_table
(
c1 integer
,c2 integer
)
WITH ( CLUSTERED INDEX (c1 ASC) )
;
在我的一个项目中使用临时 tables,在多个列上有索引,并且可以选择向它们添加新列,这对我来说非常重要。 (临时 tables 也不支持 ALTER TABLE)。标准 table 不是选项,因为每个查询 运行 必须有自己的 table.
最后,我使用了一些可以用作临时table但实际上不是临时table的东西。我正在创建一个标准 table 但使用 Guid 作为名称并将名称分配给变量。因此,我使用的不是#TempTable,而是@MySemiTempTable,但这仅适用于生成的代码。所以我必须 运行 该代码使用 sp_executesql。下面的例子:
declare @MySemiTempTable NVARCHAR(MAX)
declare @sql NVARCHAR(MAX)
set @MySemiTempTable = 'TMP_' + CAST(NEWID () AS NVARCHAR(37))
set @sql = 'CREATE TABLE ['+ @MySemiTempTable + '] (Column1 [int], Column2 NVARCHAR(50))'
EXECUTE sp_executesql @sql
set @sql = 'INSERT INTO ['+ @MySemiTempTable + '] VALUES (1, ''test1'')'
EXECUTE sp_executesql @sql
set @sql = 'create unique index column1 on ['+ @MySemiTempTable + '] (column1)'
EXECUTE sp_executesql @sql
set @sql = 'select * from ['+ @MySemiTempTable + '] '
EXECUTE sp_executesql @sql
set @sql = 'drop table ['+ @MySemiTempTable + '] '
EXECUTE sp_executesql @sql