3 index sql-server sql-server-2008-r2
乡亲
我是 DB 设计方面的新手。我想知道设计之间有什么区别和性能差异
许多具有单列的非聚集索引和具有许多列的非聚集索引组合。
或者理想情况下,在什么情况下我可以组合列来创建单个非聚集索引,如果是这样,我应该组合多少列?
选择非聚集索引列的标准是什么?(我知道它仅适用于不频繁更新的表)...
就我的问题而言,2005/2008 和 2012 SQL Server 在非聚集索引方面有什么区别,而且 249 是我们可以创建的最大值吗?
先感谢您。
拥有多个索引需要 SQL Server 为每个插入、删除或更新语句维护和更新多个索引。因此,索引越少通常越好。
但是,当您有一个复合索引(由多列组成)时,这仅在您使用/指定查询中最左边的 n 列时才有帮助。
因此,如果您在 ( City, LastName, FirstName
) 上有一个地址表的索引,那么在以下情况下可能会使用该索引
WHERE
子句中包含所有三列WHERE City = 'London'
在查询中指定(使用最左边的 1 列)WHERE City = 'London' and LastName = 'Smith'
在查询中指定(使用最左边的 2 列)然而,这样的指标不能永远被用于:
WHERE FirstName = 'Joe'
子句查找所有行- 您没有使用该索引中最左边的 n 列WHERE LastName = 'Brown' AND FirstName = 'Charlie'
子句查找所有行- 再次:您没有使用该索引中最左边的 n 列复合索引不能(在许多情况下)替换所有的单列索引。在设计和创建复合索引时要非常小心,以确保以它们真正有用的方式设计它们!
因此,虽然复合指数确实有其存在的理由,而且它们通常更可取 - 您还需要确保它们真的能够被使用。一个正在维护的索引(并导致 SQL Server 方面的工作),但永远不能在任何查询中使用,是有史以来最糟糕的索引 - 没有收益,只有维护开销。
您还应该阅读 Kimberly The Queen of Indexing Tripp 关于 SQL Server 索引的优秀博客文章 - 最值得注意的是索引:仅仅因为您可以,并不意味着您应该!
归档时间: |
|
查看次数: |
5313 次 |
最近记录: |