ChatGPT解决这个技术问题 Extra ChatGPT

SQL Server - 何时使用聚集索引与非聚集索引?

我知道聚集索引和非聚集索引之间的主要区别,并且了解它们的实际工作方式。我了解聚集索引和非聚集索引如何提高读取性能。但我不确定的一件事是,我选择其中一个而不是另一个的原因是什么。

例如:如果一张表没有聚集索引,是否应该创建一个非聚集索引,这样做有什么好处

感谢您的回复。我已经意识到这一点。我的问题是是否存在创建非聚集索引比创建聚集索引更有益的情况
是的,您应该在以下情况下避免使用聚集索引;该列具有低基数,没有特定顺序,经常更新,非顺序,它是许多列的组合......
感谢您的回答。它有帮助
也许这个问题会对您有所帮助:stackoverflow.com/questions/5070529/…

Z
Zain Rizvi

我只想说一句警告:请非常小心地选择您的聚集索引!每个“常规”数据表都应该有一个聚集索引,因为有一个聚集索引确实可以加速很多操作——是的,加速,甚至插入和删除!但前提是你选择了一个好的聚集索引。

它是 SQL Server 数据库中复制最多的数据结构。聚集键也将成为表上每个非聚集索引的一部分。

选择群集键时应格外小心 - 它应该是:

窄(4 字节理想)

唯一的(毕竟它是“行指针”。如果你不让它成为唯一的,SQL Server 会在后台为你做这件事,每个条目花费你几个字节乘以行数和非聚集索引的数量你有 - 这可能非常昂贵!)

静态的(永远不要改变 - 如果可能的话)

理想情况下不断增加,因此您不会以可怕的索引碎片告终(GUID 与良好的集群键完全相反 - 出于这个特殊原因)

它应该是不可为空的,并且理想情况下也是固定宽度 - varchar(250) 使聚类键非常差

其他任何事情都应该是这些点之后的第二和第三级重要性....

请参阅 Kimberly Tripp(索引女王)关于该主题的一些博客文章 - 她在博客中所写的任何内容都绝对是无价之宝 - 阅读、消化 - 以此为生!

GUID 作为主键和/或集群键

聚集索引辩论仍在继续……

不断增加的聚类键 - 聚类索引辩论............再次!

磁盘空间很便宜——这不是重点!


感谢 marc_s 的清晰解释。但从技术上讲,non clustered 索引对我们有什么作用。它有什么重要性..?
@nad:精心挑选的非聚集索引可以加快您的搜索速度——您不必将数百万行数据与您的搜索条件进行比较,您只需进行 4、5 次比较即可找到给定的行。这有很大的不同!
@MuriloKunze:阅读Kim Tripp's blog post on the topic - 她详细解释了为什么会这样
抱歉,“SQL Server - 何时使用聚集索引与非聚集索引?”问题的答案在哪里? ?