0

想象两个索引:

idx_1 (urlId, name)
idx_2 (urlId)

在哪里和urlId是。还有一个用于过滤且不以任何方式影响列的查询。bigintnamenvarchar(320)urlIdname

  1. 第二个索引会提高性能吗?差异会很大吗?
  2. 何时使用单列索引而不是复合多列索引可以提高查询性能?

我感谢基于示例的答案。


编辑:

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

4

1 回答 1

3

如果您的数据通常仅基于 urlId 是唯一的,那么您最好不要创建二级索引 esp。如果您可以使用 irlId 作为聚集索引。由于索引的第二部分比 bigint 大得多,通过每个块拥有更多的键,您可能会获得更好的性能,并且避免了键维护的额外开销。但是,如果您可以相当确定您没有很多共享相同 urlId 的记录,那么 2-part 可能是更好的选择,以获得更好的最坏情况性能。尽管差异对您很重要,但您确实必须进行测量以确定。

于 2013-09-10T16:13:02.967 回答