我正在尝试优化一个具有如下代码的过程:
CREATE TABLE #t1 (c1 int, c2 varchar(20), c3(varchar(50)...)
CREATE CLUSTERED INDEX ix_t1 ON #t1(c3) ON [PRIMARY]
我想通过将 CLUSTERED 索引移动到表声明中(更加缓存友好)来改进这一点,但 c3 不是唯一的,因此这不起作用:
CREATE TABLE #t1 (c1 int, c2 varchar(20), c3 varchar(50)..., UNIQUE CLUSTERED (c3))
有没有办法声明临时表声明中不唯一的集群?
最佳答案
是的,在 SQL Server 2014 及更高版本中是可能的,Create table on MSDN 。 从 2014 年开始,您可以在创建表语句中指定内联索引。
if object_id('tempdb..#t1') is not null drop table #t1;
CREATE TABLE #t1 (
c1 int,
c2 varchar(20),
c3 varchar(50),
index [CIX_c3] CLUSTERED (c3),
index [IX_c1] nonclustered (c1)
)
insert #t1(c3) values ('a'), ('a'), ('a')
select * from #t1
关于sql - 临时表上的聚集索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663967/