真正大型数据库的最佳索引实现是什么

Dan*_*ieh 3 performance index sql-server

我有一个非常大的 SQL SERVER 表,其中只有几个列的非聚集索引,在查询表时,执行计划显示RID 查找,我希望看到这种查找,因为选择列表中的列不是覆盖索引的一部分或包含在另一个索引中。

非聚集索引是在多列上创建的,因为这些列中的每一列都是具有不同选择列表和搜索条件的不同查询的一部分。

由于大小和存储问题,创建覆盖索引或包含列的新索引同时保留当前非聚集索引是不可行的。

现在的问题是:

  1. 我可以用一个覆盖索引替换非聚集索引吗?
  2. 如果没有,有没有办法摆脱 RID 查找而不是覆盖索引?
  3. 根据选择列表中的列和搜索条件,每个查询是否需要不同的覆盖索引?
  4. 我在表中没有聚集索引,添加唯一列并将其设置为主键是否有助于摆脱 RID 查找?
  5. 欢迎任何解决此类问题的注释或评论..

Rob*_*ley 6

我可以用一个覆盖索引替换非聚集索引吗?

不。假设您有时按姓氏查找人员,有时按名字查找人员。(LastName, FirstName) 上的索引不会帮助您按名字查找人员。

如果没有,有没有办法摆脱 RID 查找而不是覆盖索引?

不是特别有用的方式。

根据选择列表中的列和搜索条件,每个查询是否需要不同的覆盖索引?

差不多。你的工作是提出妥协。

我在表中没有聚集索引,添加唯一列并将其设置为主键是否有助于摆脱 RID 查找?

PK 不一定意味着聚集索引。拥有 CIX 仅意味着您的 RID 查找将成为关键查找,这可能会更糟。但是,如果没有 CIX,您将拥有在更改或删除数据时可能会碎片化的堆。所以 CIX 很好,但不会提高查找的性能。