首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单列和多列组合的多个非聚集索引的区别

单列和多列组合的多个非聚集索引的区别
EN

Database Administration用户
提问于 2012-07-14 06:07:39
回答 2查看 5.7K关注 0票数 3

乡亲

我是DB设计的新手。我想知道设计的不同之处和性能差异

  1. 许多单列的非聚集索引和多列合并的非聚集索引。
  2. 或者理想情况下,在何种情况下,我可以组合列以生成单个非聚集索引,如果可以,应该合并多少列?
  3. 为非聚集索引选择列的标准是什么?(我知道它只适用于不经常更新的表)。
  4. 就我的问题而言,2005/2008和2012 SQL Server在非聚集索引方面有什么不同,而且249是我们可以创建的最大值吗?

提前谢谢你。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-07-14 07:10:25

拥有许多索引要求Server维护和更新每个insert、delete或update语句的多个索引。因此,指数较少通常更好。

但是,当您有一个复合索引(由多个列组成)时,只有在使用/指定查询中的n个左列时,这才有帮助。

因此,如果对一个地址表有一个索引on (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个最左边的列

复合索引(在许多情况下)不能替换所有的单列索引。在设计和创建复合索引时要非常小心,以确保设计它们的方式非常有用!

因此,尽管复合指数确实有其存在的理由,而且它们通常更可取--你也需要确保它们真的能够被使用。正在维护的索引(并导致Server方面的工作),但永远不能在任何查询中使用的索引,是有史以来最糟糕的索引--没有增益,只有维护开销。

您还应该阅读“索引女王”金伯利·特里普关于Server索引的优秀博客文章--最著名的是索引:仅仅因为你可以,并不意味着你应该!

票数 6
EN

Database Administration用户

发布于 2012-07-14 06:19:16

那得看情况。如果大多数查询只使用where子句或on join子句中的一个列。然后,当where子句中有一个组合列时,单列nc索引应该是fine.But,然后使用组合索引应该是首选的。

您可以创建999个NC索引。另外,您可以在索引中使用covering.But子句来使更多的索引生成更多的索引,请注意,创建未完成的索引可能会减慢您的DML操作,并会导致表和索引的大小增加。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/20904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档