当前位置:  开发笔记 > 编程语言 > 正文

群集索引和非群集索引之间有什么区别?

如何解决《群集索引和非群集索引之间有什么区别?》经验,为你挑选了10个好方法。

a clustered和a 之间有什么区别non-clustered index



1> Martynnw..:

聚集指数

每桌只有一个

读取速度比非聚集读取速度快,因为数据以索引顺序物理存储

非聚集指数

每张桌子可以多次使用

插入和更新操作比聚簇索引更快

当选择具有使用索引的字段但会减慢更新和插入操作的数据时,这两种类型的索引都将提高性能.

由于插入和更新速度较慢,应在通常为增量的字段(即Id或Timestamp)上设置聚簇索引.

如果SQL Server的选择性高于95%,SQL Server通常只使用索引.


这纯粹是教条.它不是"读取速度更快,因为数据按顺序存储".读取速度更快,因为您可以避免读取索引,然后读取表格.扫描范围更快(如果有意义),因为数据按顺序存储.即聚类因子是完美的.
还有存储注意事项.将行插入到没有聚簇索引的表中时,行会在页面上背靠背存储,更新行可能会导致行被移动到表的末尾,从而留下空白空间并对表和索引进行分段.
95%的记录需要独特的想法也是一种谬误.假设您有一个包含1,000,000行的表,并使用500,000个键索引一列.0%是唯一的,但每个键返回100万行中的2个.无论0%的记录是唯一的,该索引都非常有用.
你不必关心什么是x.您需要知道的是,对于拥有数百万用户的应用,x将是重要的

2> rslite..:

聚簇索引在物理上对磁盘上的数据进行排序.这意味着索引不需要额外的数据,但只能有一个聚簇索引(显然).使用聚簇索引访问数据的速度最快.

所有其他索引必须是非群集的.非聚集索引具有与保持有序的索引列一起的数据的副本以及指向实际数据行的指针(如果存在,则指向聚簇索引的指针).这意味着通过非聚集索引访问数据必须经过额外的间接层.但是,如果仅选择索引列中可用的数据,则可以直接从重复的索引数据中获取数据(这就是为什么最好只选择所需的列而不使用*)


'但是,如果只选择索引列中可用的数据,则可以直接从重复的索引数据中获取数据' - 是的,这是首选聚簇索引启发式的重要例外.我想在这种情况下你基本上有一个聚簇索引,但是你要查询的表中的数据较少,因此可以在磁盘上更快地读取它.

3> Santiago Cep..:

聚簇索引物理存储在表中.这意味着它们是最快的,每个表只能有一个聚簇索引.

非聚集索引是单独存储的,您可以拥有任意数量的索引.

最好的选择是在最常用的唯一列上设置聚簇索引,通常是PK.你应该总是在你的表中有一个精心挑选的聚集索引,除非有一个非常令人信服的理由 - 不能想到一个,但是嘿,它可能在那里 - 因为没有这样做.


你能详细说明"我们应该在表格中总是有一个聚集索引"吗?没有详细说明,因为**总是**这句话是完全错误的

4> 小智..:

聚集指数

    表只能有一个聚簇索引.

    通常在主键上制作.

    聚簇索引的叶节点包含数据页.

非聚集指数

    一个表只能有249个非聚集索引(直到sql版本2005更高版本支持最多999个非聚簇索引).

    通常在任意键上制作.

    非聚簇索引的叶节点不包含数据页.相反,叶节点包含索引行.



5> Lasitha Yapa..:

聚集指数

表中只能有一个聚簇索引

对记录进行排序并根据订单进行物理存储

数据检索比非聚集索引更快

不需要额外的空间来存储逻辑结构

非聚集指数

表中可以有任意数量的非聚簇索引

不要影响物理秩序.为数据行创建逻辑顺序并使用指向物理数据文件的指针

数据插入/更新比聚簇索引更快

使用额外的空间来存储逻辑结构


除了这些差异之外,您还必须知道,当表是非群集的时(当表没有聚簇索引时),数据文件是无序的,并且它使用堆数据结构作为数据结构.



6> Biri..:

聚集基本上意味着数据处于表中的那种物理顺序.这就是为什么每桌只能有一个.

Unclustered意味着它"仅"是一个逻辑顺序.



7> Giovanni Gal..:

优点:

聚簇索引适用于范围(例如,从my_table中选择*,其中@min和@max之间的my_key)

在某些情况下,如果使用orderby语句,DBMS将不必进行排序.

缺点:

群集索引可以减慢插入速度,因为如果新密钥不按顺序排列,则必须在记录放入时修改记录的物理布局.



8> Ed Guiness..:

聚簇索引本质上是索引列中数据的排序副本.

聚簇索引的主要优点是,当您的查询(搜索)在索引中查找数据时,不需要额外的IO来检索该数据.

维护聚簇索引的开销(尤其是在频繁更新的表中)可能导致性能不佳,因此可能最好创建非聚簇索引.



9> supercat..:

索引数据库有两部分:一组物理记录,按任意顺序排列;一组索引,用于标识应读取记录的顺序,以产生按某种标准排序的结果.如果物理排列和索引之间没有相关性,那么按顺序读出所有记录可能需要进行大量独立的单记录读取操作.因为数据库可以在比读取两个非连续记录所花费的时间更短的时间内读取数十个连续记录,所以如果索引中连续的记录也连续存储在磁盘上,则可以提高性能.

例如,如果要以空的非群集数据库开始并按随机顺序添加10,000条记录,则记录可能会按添加顺序添加到最后.按索引按顺序读出数据库需要10,000个单记录读取.但是,如果要使用群集数据库,系统可能会检查添加每条记录的时间是否自己存储了以前的记录; 如果发现是这种情况,它可能会在数据库末尾用新的记录写下该记录.然后,它可以在移动的记录用于驻留的插槽之前查看物理记录,并查看随后的记录是否由其自身存储.如果发现是这种情况,它可以将该记录移动到该位置.使用这种方法会导致许多记录成对组合在一起,

实际上,群集数据库使用比这更复杂的算法.但需要注意的一点是,在更新数据库所需的时间与按顺序读取数据库所需的时间之间存在权衡.维护群集数据库将显着增加以任何可能影响排序顺序的方式添加,删除或更新记录所需的工作量.如果按顺序读取数据库的次数比更新次数要多,则群集可能是一个很大的胜利.如果它经常更新但很少按顺序读出,则群集可能是一个很大的性能消耗,特别是如果项目添加到数据库的顺序与它们关于聚簇索引的排序顺序无关.



10> Josh..:

聚集索引实际上描述了记录物理存储在磁盘上的顺序,因此您只能拥有一个.

非群集索引定义与磁盘上的物理顺序不匹配的逻辑顺序.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有