关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »对SQL Server聚集索引的指示综合描述

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

    2011-03-30 11:28:00 出处:ITJS
    分享

    导读:文章主要描述的是SQL Server聚集索引的指示,在实际操作中借助聚集索引来进行搜索行,在一般的情况下会比借助非聚集索引来搜索行快主要有两个原因。下文中将为大家详细分析分析。

    原因一是聚集索引只包含了一个指向页的指针而不是指向单个数据行的指针;所以,一个聚集索引比非聚集索引更紧凑。因为SQL Server聚集索引更小并且不需要额外的书签查找来发现匹配的行,而且比相似定义的非聚集索引可通过更少的页的读操作来发现行。

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

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

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

    根据这种思想,你可能想为你的主键创建一个唯一的非聚集索引,并选择其他候选列做为你的聚集索引。接下来的SQL server内容就是一些指南,可以帮助你来选择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聚集索引时才使用)

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

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

    SQL Server聚集索引的功能性较平常的索引工具功能更强大,通过上文的学习相信大家对SQL Server聚集索引已经有了大体的了解,掌握了SQL Server聚集索引的知识,相信对大家是非常有用的,希望上文中介绍到的内容对大家能够有所帮助。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。