好的,我需要再详细说明一遍。我已经在线阅读了相关文章,但仍然没有找到明确的答案。
在 SQL Server 2008 中,我有一个“核心”表格,大约有 50,000 条记录,并且有很多读取活动,在所有查询中都以相同的方式使用。这些数据每月更新一次,并且每秒钟会被读取数百次。
这些数据在常用情况下具有聚集索引。假设聚集索引是:
聚集索引
Field1 int
Field2 int
Field3 int
Field4 int
Field5 int
现在,除此之外没有更多的数据了,所以把额外的几列放到“包含的列”中是有道理的,但是SQL Server不允许在聚集索引上使用包含的列。因此,我们需要一个第二个索引,其基本上与聚集索引相同,具有其他列作为“包含的列”。然而,根据我所读的内容,我认为这可能是多余的?非聚集覆盖索引。
Field1 int
Field2 int
Field3 int
Field4 int
Field5 int
包含的列
Field6 varchar(96)
Field7 varchar(96)
非聚集索引是否已经定义了聚集索引中的列?
如果是这样,如何创建一个没有任何列(除了聚集索引中已有的列)的第二个索引?换句话说,“这个索引与聚集索引完全相同…只是包含了一些包括的列”。
或者,将所有列都放入聚集索引中(包括不识别记录的两列)是否更好?varchar列更新的频率更高(每天几次而不是每月一次),所以我本来想将它们排除在聚集索引之外,但我认为它们足够深,不会对索引树产生影响,从而在发生更改时导致任何重新平衡。
因此,是否有一种有效的方法来设置这些索引,使得这个表的所有列都可以通过索引访问,而不需要返回到表格?