许多SQL Server的广泛指标包括列(SQL Server wide indexes with

2019-09-28 01:28发布

我应该小心加入过多的包括以非群集索引列?

据我所知,这将防止全面覆盖查询书签查找窗口,但我相信反是有维护索引如果列不是静态的,造成额外物理指标的附加整体规模读取的额外费用。

Answer 1:

你在问题中说的那样:用具有指标很多索引和/或多个列的风险,维护索引的成本可能成为其收到很多CUD(创建/更新/删除)操作的数据库显著。

选择合适的指标,是那种一门艺术,要平衡最常见的用例,与存储的担忧沿(通常是低优先级的问题,但在某些情况下很重要),以及性能问题CUD欢声笑语。



Answer 2:

我同意MJV - 有没有真正的方便快捷的答案,这一点 - 这是一个平衡的行为。

在一般情况下,较少但更广泛的指标,优选了许多窄的人,并覆盖指数(与包括字段)是在具有做书签查找最好 - 不过这只是概括,这些都是一般来讲错:-)

你真的不能做的比测试和测量更多:

  • 测量感兴趣的区域的表现
  • 然后添加您的宽覆盖指数
  • 再次测量,看看你一)获得对某些操作的加速,和b)其余性能不会受太大的影响

所有的猜测,并试图弄清楚确实没有帮助 - 措施,做到这一点,再次测量,比较的结果。 这真的是你能做的一切。



Answer 3:

我有两个答案同意到目前为止,只想补充两两件事:

对于覆盖索引,SQL Server 2005中引入了include子句这使得存储和使用更有效。 对于早期版本中,包括柱为树的一部分,所述900字节宽度的一部分,并且由指数越大。

这也是典型的使用注释sp_spaceused当你的指数是大于表的大小。 数据库大多是读(我看到了“85%读”的地方),即使写重(如INSERT查找重复,删除检查FKS,用WHERE等UPDATE)。



文章来源: SQL Server wide indexes with many include columns