使用SQL Server 2014:
在我的TSQL数据库应用程序中,我创建了临时表,其中包含我正在使用的记录的主键ID。
DECLARE @TempListOfIDs TABLE(PKID BIGINT)
问题是我应该在@ TempListOfIDs.PKID列上创建聚簇索引吗?我担心表中的行数如此之少(< 5000行),在临时表上创建聚簇索引的成本超过了它的好处。
答案 0 :(得分:3)
这是一个表变量而不是临时表。
假设您插入的值是唯一的,我可能会使用
DECLARE @TempListOfIDs TABLE(PKID BIGINT PRIMARY KEY)
表变量没有列统计信息,约束可以提供一些有用的密度信息。另外,您应该考虑使用OPTION (RECOMPILE)
,以便考虑表变量的行数。
此外,支持索引对某些执行计划肯定有用。例如,如果表变量最终位于嵌套循环连接的内部。
如果这是一些性能关键的代码,那么当然只是测试它。
答案 1 :(得分:1)
在您的情况下确定的唯一方法是测试两种情况。我个人认为,如果你正在进行内部联接,这是不值得的。
SQL应该认识到需要来自小表的所有记录/列,因此任何索引都将被忽略。即使使用索引,也需要进行全表扫描。
答案 2 :(得分:0)
聚簇索引可能没有帮助,但如果按聚簇索引的顺序添加值,那么它将花费很少。
从两个方面看一些查询计划。