对SQL Server聚集索引的指示描述

文章主要描述的是SQL Server聚集索引的指示(Cluster Index Indications),在实际操作中借助聚集索引来进行搜索行,在一般的情况下会比借助非聚集索引来搜索行快主要有两个原因。原因一是聚集索引只包含了一个指向页的指针而不是指向单个数据行的指针;

所以,一个聚集索引比非聚集索引更紧凑。因为SQL Server聚集索引更小并且不需要额外的书签查找来发现匹配的行,而且比相似定义的非聚集索引可通过更少的页的读操作来发现行。

第二个原因是聚集索引的表中的数据物理上就是按照聚集键来存放,搜索重复值或者聚集键的一个范围值更快;行之间相互邻接并且SQL Server能简单定位第一个满足条件的行然后顺序搜索直到发现最后一个满足条件的行。然而,每个表上只能创建一个聚集索引,你必须明智地选择在哪个列或哪些列上来定义聚集索引。

如果你要求在一个表上只创建一个单独的索引,那创建SQL Server聚集索引有很大优势;则结果就是在修改、插入和删除时的负担将比创建非聚集索引的负担要小的多。

默认情况下,表中的主键将被定义为聚集的唯一索引。在大多数应用中,表上的主键列总是以单行查找的方式来检索。对于单行查找,一个非聚集索引通常比一个相似的聚集索引花费更少的I/O代价。你或者你的用户真正注意过读三页去检索单个数据行和四到六页去检索单个数据行之间的区别吗?不一定。然而,如果你执行一个范围检索,比如查找last name,你将会注意到扫描表的10%和使用全表扫描来发现行之间的区别吗?一定会的。

根据这种思想,你可能想为你的主键创建一个唯一的非聚集索引,并选择其他候选列做为你的聚集索引。下面就是一些指南,可以帮助你来选择SQL Server聚集索引的潜在的候选者:

一些频繁搜索的具有许多重复值的列,比如, where last_name = ‘Smith’ 因为数据物理上是有序的,所有的重复值将聚集在一起。任何一个对该键值的查询将会用最小的I/O来发现所有的值。SQL Server 定位第一个满足SARG的行,然后按顺序扫描数据直到找到最后一个满足SARG的行。

 

经常被ORDER BY子句指定的列。

因为数据已经是有序的,如果ORDER BY 是关于聚集索引的,那SQL Server将避免重新排序。记住:即使对一个表扫描,数据也将会按照聚集键值的顺序检索,因为数据表上的数据是按照聚集键值排序。

 

经常按照一个范围值进行查询的列,例如,Where price between ¥10 and ¥20 使用聚集索引首先定位第一个满足范围条件的行。因为表中的行按顺序排列,SQL Server能简单按顺序扫描数据页直到最后个满足范围的条件的行。当满足条件的结果集非常大,从执行的逻辑I/O来讲,SQL Server聚集索引扫描将比借助非聚集索引重复进行书签查找更有效。

除了主键外,频繁使用在join子句中的列。聚集索引趋向于比非聚集索引更小;每个查找需要页的I/O一般来讲比非聚集索引更少。当join许多记录时这种区别将是巨大的。一两个额外的读页操作好像对一个单行检索来说不多,但是把这些额外的对100,000join迭代的读页操作相加,你会看到总共100,000到200,00读页操作。

选择聚集索引键时应满足四个特点:

Narrow(窄,即长度短)

 

Unique(唯一性)

 

Unchanging(不变化)

 

Ever increasing(不断增长)

 

当你考虑聚集索引列时,你可能想尝试在相对静态的列上创建SQL Server聚集索引,来最小化由于索引列的修改而引起的数据行重新排序。任何时间当聚集索引的键值改变了,所有把聚集索引作为书签的非聚集索引都需要被修改。

尽量避免在以单调形式插入的顺序的键字段上创建聚集索引,比如一个标识列(identity column)。这会在表的末尾创建一个”热点”(hot spot),结果会在表和索引的的末尾导致锁竞争和死锁。另外,聚集索引也不会重用以前数据页中的空间,因为所有新的行都排在数据表的末尾。这种情况造成了空间的浪费和你的表的增长会比预期的要大。一般的建议是,尽量在一个有某种随机分布的数据值上建立索引。尽量选择一个使得插入和修改活动散布在整个表的聚集键。一些能够使得数据随机化的候选聚集索引包括下列:

出生日期

Last name first name

 

邮编

 

一个随机hash key(通常只当没有其他实际列可以作为好的候选的SQL Server聚集索引时才使用)

 

在整个表上散布你的数据有助于最小化页竞争,同时也提供了更有效的空间利用。如果序列键是你的主键,你仍能用一个唯一、非聚集索引来提供一个访问路径并维护主键的唯一性。

 

因为你只能以一种方式对表上的数据进行物理排序,你只能有一个聚集索引。你想索引的其它列只能被定义为非聚集索引。

【编辑推荐】

  1. SQL Server 2005固定服务器角色的操作全过程
  2. SQL Server 实用操作的代码演示
  3. SQL Server 2000全文检索的使用方案描述
  4. SQL Server 2005数据库安装实例演示
  5. SQL Server数据库在安装时的注意事项

 

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/272476.html<

(0)
管理的头像管理
上一篇2025-05-08 19:59
下一篇 2025-05-08 20:01

相关推荐

  • 服务器UEFI和Legacy启动模式有什么区别,哪个好

    UEFI(统一可扩展固件接口)是取代传统Legacy BIOS的现代启动标准,在服务器领域,UEFI凭借更快的启动速度、超过2TB的磁盘支持、安全启动(Secure Boot)以及丰富的预启动网络功能,成为主流服务器的默认配置;而Legacy BIOS作为兼容性模式,仅在需要运行老旧操作系统或特定硬件时保留,U……

    2026-07-26
    0
  • 站群服务器为什么比普通服务器贵,哪家性价比高?

    站群服务器之所以比普通服务器贵,核心在于其为了支撑大量独立站点同时稳定运行,在硬件隔离、独立IP资源池、高防御网络架构以及合规运维上投入了普通服务器数倍的成本,这些硬性支出直接反映在了最终定价上,硬件配置的“冗余”设计决定成本基线站群服务器与普通服务器最直观的差异体现在硬件层面,普通服务器往往面向单一应用或少量……

    2026-07-26
    0
  • 企业级服务器和普通服务器区别在哪?,怎么选性价比高

    前者为关键业务连续性与高并发场景设计,具备硬件冗余、故障自愈和全生命周期管理能力;后者面向基础应用,追求性价比与部署便捷性,硬件架构的底层差异企业级服务器从硬件选型就与普通服务器划清界限,CPU通常支持多路互联,内存频率更高且支持ECC纠错与RAS特性,存储控制器配备缓存保护与RAID加速,普通服务器往往采用单……

    2026-07-26
    0
  • 服务器托管到底是什么意思?,收费标准是什么?

    服务器托管,简单说就是你自己买好服务器,放到专业IDC机房,由机房提供稳定的网络、电力和环境,你按月支付机位和带宽费用,相比租用服务器,你拥有硬件所有权;相比云服务器,性能更可控,适合高负载或合规要求高的业务,服务器托管到底是什么很多人分不清托管和租用,托管是你自备服务器,放在运营商的数据中心,共享其基础设施……

    2026-07-26
    0
  • 站群服务器容易被封的原因是什么,如何避免?

    站群服务器被封,根源在于IP关联、内容违规和资源滥用,而选择持有正规资质、独立IP和严格审核的服务商是根本解决之道,核心原因:封禁背后的逻辑IP关联与搜索引擎算法搜索引擎对同一IP下的站点行为越来越敏感,如果多个站点共享一个IP,且存在相似结构、互相链接或相同注册信息,极容易被判定为站群并受到惩罚,近年来,算法……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注