我可能没有正确地构思这个问题。通过使用,我不是说我应该在何时何地在桌面上创建一个 - 这将是一个过于宽泛的问题。
我的意思是,一旦我创建聚簇索引,它是否会提高性能,或者我是否需要在查询中使用关联列来提高性能?
这是一个例子:假设我创建了一个包含以下列的表; RowNum,FileId,Name和Date。 RowNum我创建了一个标识列,我应用了一个聚簇索引。但是,实际上通常使用FileId查询表。例如:
SELECT
FileId,
Name
FROM MyTable
WHERE FileId IN ('11101101', '11101201', '11101301')
由于查询中未使用RowNum,我仍然可以从索引中获得任何性能优势吗?
如果这是一个基本问题,请提前抱歉。我一直在阅读约束和索引,我想确定我理解它们。这似乎是我读到的所有内容中的一个点。
编辑:我想我得到了答案。或者至少接近我将要得到的明确答案。
让我稍微重申一下这个问题:我想要解决的是假设我有一个包含三列的表,rowNum,Id和Name。通常会在Id或Name上查询此表,让我们更进一步说我们将在每个列上都有非聚簇索引。我的问题是,在这种情况下,rowNum上的聚簇索引可以提高使用其他列的查询的性能。
我最好收集,答案是肯定的,但你可能想考虑将聚集索引放在另一列上。
这是一个非常广泛的问题,我很欣赏每个人提供的洞察力。我接近一个好的答案,因为我将得到相关的事实,而且我现在对索引更了解。再次感谢!
答案 0 :(得分:1)
如果表具有自然主键,那么这是聚簇索引的良好候选者。
在您的情况下,RowNum是聚簇索引上的标识PK。这对于通过RowNum查找行很有用,并且对连接很有用。
有时您会在查询中看到一个PK或其他索引,它甚至看起来都不会使用该列。
您发布的查询将受益于FileId上的非聚集索引。
如果FileId是唯一的,那么将其视为PK并跳过RowNum。
答案 1 :(得分:0)
简短的回答是你需要有1个!每个表的聚集索引,通常是PK。如果它是计数器,则PK是正确的候选者(意味着新行将在表的末尾)。关于SO(like this one)和网上有很多关于此问题的讨论。
答案 2 :(得分:0)
关于表现和指数的许多问题,正确的答案是:取决于。
聚簇索引意味着您的表不是由该列排序的“物理”(这就是为什么您只能在表中使用单个聚簇索引)。这也是为什么在该索引中使用非顺序值列是一个坏主意的原因。
同样在MSSQL Server中,如果您在表中获得了唯一的聚簇索引,则您创建的其他索引“隐式”包括聚簇索引。
当您对其列进行大量过滤/排序时,聚簇索引适用于选择。
在@Frisbee评论的自然或代理键上使用它也很常见。
聚簇索引不适合插入/更新,并且当您更改聚合索引列上的值/插入不是连续值时非常糟糕,因为引擎会尝试保持索引B树平衡和有序
确保正确使用索引的唯一方法是对其进行酸性测试(使用膨胀的数据库)并研究其实际查询计划。
我建议您查找MSDN和SQL Server Central等网站,并详细了解索引,因为这个主题对于这个答案来说过于宽泛。