单列索引与多列索引

时间:2013-09-10 15:40:35

标签: sql sql-server tsql

想象一下两个索引:

idx_1 (urlId, name)
idx_2 (urlId)

urlIdbigintnamenvarchar(320)。并且使用urlId进行过滤的查询不会以任何方式影响列name

  1. 第二个索引会改善性能吗?差异会很大吗?
  2. 当使用单列索引而不是复合多列索引可以提升查询性能?
  3. 我很感谢基于例子的答案。


    修改

    从答案中我了解到并非如此简单。这不是'黑与白'。所以我稍微改变了一下我的问题。我假设第二个应该更快一点,因为它更小。但似乎并非在所有情况下都如此。所以 WHEN 在这些情况下,性能没有差异,为什么会发生。

1 个答案:

答案 0 :(得分:3)

如果您的数据通常仅基于urlId是唯一的,那么最好不要创建二级索引esp。如果你可以使用irlId作为聚集索引。由于索引的第二部分比bigint大得多,因此每个块有更多的密钥可能会有更好的性能,并且可以避免密钥维护带来的额外开销。但是,如果你可以相当肯定你没有很多共享一个共同urlId的记录,那么2部分可能是更好的最坏情况性能的选择。如果差异对你很重要,你真的需要衡量以确定。