sql - 临时表上的聚集索引

标签 sql sql-server tsql temp-tables clustered-index

我正在尝试优化一个具有如下代码的过程:

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/

相关文章:

sql - 按最大限制的引用总和对对象进行分组

从同一个表中获取员工姓名和经理姓名的 SQL 查询

sql - 在 SQL Server 中使用具有两个条目(值)的同一个表中的另一列更新列

sql - 如何获取两个日期之间耗时,忽略某些时间范围?

sql - 返回受更新查询影响的所有主键

sql-server - 表值参数 "sniffing"

mysql - 初学者如何启动MySQL Workbench并连接?

mysql统计多列的总数

mysql - mysql 更新未提交

sql-server - 如何在UBUNTU上安装SQL Server Native Client 11.0?