我应该小心加入过多的包括以非群集索引列?
据我所知,这将防止全面覆盖查询书签查找窗口,但我相信反是有维护索引如果列不是静态的,造成额外物理指标的附加整体规模读取的额外费用。
我应该小心加入过多的包括以非群集索引列?
据我所知,这将防止全面覆盖查询书签查找窗口,但我相信反是有维护索引如果列不是静态的,造成额外物理指标的附加整体规模读取的额外费用。
你在问题中说的那样:用具有指标很多索引和/或多个列的风险,维护索引的成本可能成为其收到很多CUD(创建/更新/删除)操作的数据库显著。
选择合适的指标,是那种一门艺术,要平衡最常见的用例,与存储的担忧沿(通常是低优先级的问题,但在某些情况下很重要),以及性能问题CUD欢声笑语。
我同意MJV - 有没有真正的方便快捷的答案,这一点 - 这是一个平衡的行为。
在一般情况下,较少但更广泛的指标,优选了许多窄的人,并覆盖指数(与包括字段)是在具有做书签查找最好 - 不过这只是概括,这些都是一般来讲错:-)
你真的不能做的比测试和测量更多:
所有的猜测,并试图弄清楚确实没有帮助 - 措施,做到这一点,再次测量,比较的结果。 这真的是你能做的一切。
我有两个答案同意到目前为止,只想补充两两件事:
对于覆盖索引,SQL Server 2005中引入了include子句这使得存储和使用更有效。 对于早期版本中,包括柱为树的一部分,所述900字节宽度的一部分,并且由指数越大。
这也是典型的使用注释sp_spaceused当你的指数是大于表的大小。 数据库大多是读(我看到了“85%读”的地方),即使写重(如INSERT查找重复,删除检查FKS,用WHERE等UPDATE)。