1 什么是聚集和非聚集索引

SQL SERVER提供两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。

其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”

如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”

每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。

2 何时使用聚集索引或非聚集索引

3 索引操作示例语句

-- 创建唯一聚集索引
create unique clustered        --表示创建唯一聚集索引
index UQ_Clu_StuNo        --索引名称
on Student(S_StuNo)        --数据表名称(建立索引的列名)
with
(pad_index=on,    --表示使用填充fillfactor=50,    --表示填充因子为50%ignore_dup_key=on,    --表示向唯一索引插入重复值会忽略重复值statistics_norecompute=off    --表示启用统计信息自动更新功能
)-- 创建唯一非聚集索引
create unique nonclustered        --表示创建唯一非聚集索引
index UQ_NonClu_StuNo        --索引名称
on Student(S_StuNo)        --数据表名称(建立索引的列名)
with
(pad_index=on,    --表示使用填充fillfactor=50,    --表示填充因子为50%ignore_dup_key=on,    --表示向唯一索引插入重复值会忽略重复值statistics_norecompute=off    --表示启用统计信息自动更新功能
)--创建聚集索引
create clustered index Clu_Index
on Student(S_StuNo)
with (drop_existing=on)    --创建非聚集索引
create nonclustered index NonClu_Index
on Student(S_StuNo)
with (drop_existing=on)    --创建唯一索引
create unique index NonClu_Index
on Student(S_StuNo)
with (drop_existing=on)create nonclustered index Index_StuNo_SName
on Student(S_StuNo,S_Name)
with(drop_existing=on)
--创建非聚集复合索引,未指定默认为非聚集索引
create index Index_StuNo_SName
on Student(S_StuNo,S_Name)
with(drop_existing=on)--创建非聚集覆盖索引
create nonclustered index NonClu_Index
on Student(S_StuNo)
include (S_Name,S_Height)
with(drop_existing=on)--创建非聚集覆盖索引,未指定默认为非聚集索引
create index NonClu_Index
on Student(S_StuNo)
include (S_Name,S_Height)
with(drop_existing=on)--查看指定表 Student 中的索引
exec sp_helpindex Student    --删除指定表 Student 中名为 Index_StuNo_SName 的索引
drop index Student.Index_StuNo_SName--检查表 Student 中索引 UQ_S_StuNo 的碎片信息
dbcc showcontig(Student,UQ_S_StuNo)--整理 Test 数据库中表 Student 的索引 UQ_S_StuNo 的碎片
dbcc indexdefrag(Test,Student,UQ_S_StuNo)--更新表 Student 中的全部索引的统计信息
update statistics Student

参考
https://msdn.microsoft.com/zh-cn/library/ms188783.aspx

sql server 索引学习1相关推荐

  1. SQL Server索引设计 第五篇

    SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列: 使用窄索引: 检查列的选择性: 检查列的数据类型: 考虑列顺序: 考虑索引类型(聚集索引OR非聚集索引): 一.检查 ...

  2. SQL SERVER深入学习学习资料参考

    SQL SERVER深入学习学习资料参考 1.微软Webcast<sql server 2000完结篇>. 尽管微软Webcast出了很多关于Sql Server的系列课程,但是最为深入讲 ...

  3. SQL Server索引总结二

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

  4. SQL Server 索引结构及其使用(四)

    KeyLife富翁笔记 作者: HongYuan 标题: SQL Server 索引结构及其使用(四) 关键字: 分类: 个人专区 密级: 公开 (评分: , 回复: 0, 阅读: 601)  ...

  5. SQL Server数据库学习总结及T-SQL语法使用实战

    SQL Server数据库及T-SQL实战 声明 名词解释 SQL Server数据库 安装sql server 数据库中的三种完整性 SQL Server数据库基本操作 创建数据库 指定多个数据库文 ...

  6. 昨日关注:SQL Server 索引结构及其使用

    2005-4-25 [数据库技术] SQL Server 索引结构及其使用(4) # 为解决这个矛盾,笔者后来又添加了一个日期列,其默认值为getdate().用户在写入记录时,这个列自动写入当时的时 ...

  7. SQL Server 索引结构及其使用(二)(转)

    SQL Server 索引结构及其使用(二) 作者:freedk 一.深入浅出理解索引结构 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被 ...

  8. SQL Server 索引和表体系结构(聚集索引)

    原文:SQL Server 索引和表体系结构(聚集索引) 聚集索引 概述 关于索引和表体系结构的概念一直都是讨论比较多的话题,其中表的各种存储形式是讨论的重点,在各个网站上面也有很多关于这方面写的不错 ...

  9. 【翻译】SQL Server索引进阶:第三级,聚集索引

    原文地址: Stairway to SQL Server Indexes: Level 3, Clustered Indexes 本文是SQL Server索引进阶系列(Stairway to SQL ...

最新文章

  1. Unity -- 材质-Material和预设体-Prefabs
  2. 多线程设计模式 - Future模式
  3. 首席架构师眼中的架构应该是怎样的?
  4. 小米路由器mini无线连接HP1010打印机
  5. 抖音无水印下载不求人
  6. 给出a-z,0-9,输出所有的3个字符的组合
  7. STM32通过SPI读W25Q64的ID时钟分析
  8. 用shader做一个柿子颜色的过场动画
  9. YJJ's Salesman HDU - 6447(线段树 单点更新+DP思想)
  10. 谷歌浏览器chrome官方下载网址
  11. 20175208 实验一 Java开发环境的熟悉
  12. 实景三维社区网格化平台,让管理精准!快速!高效!
  13. sturts2框架知识点(Struts2框架----今天脑子有点炸)
  14. Android哪个系统占用内存小,哪个安卓模拟器占用的内存小,使用起来又不卡
  15. 一个公众事件的简单思考(r12笔记第15天)
  16. “无实物尝百味”通过控制微电流刺激产生味觉—2.环境搭建篇
  17. 如何修复移动宽带720错误 win8.1
  18. Yade安装+优化教程
  19. 易语言 用精易的网页_访问 请求https的时候返回不了数据
  20. php时间戳,PHP时间戳的实例讲解

热门文章

  1. java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?
  2. 基于XML的IOC案例
  3. java修改JFrame默认字体
  4. vue项目在IE中显示空白,报错:vuex requires a Promise polyfill in this browser
  5. PCB布线技术 很好很强大
  6. [GXYCTF2019]禁止套娃 1
  7. Python基础07 函数
  8. zlggui菜单12864_lcddrive.h
  9. 牛顿法求解方程(python和C++)
  10. 第一章:1.2.2系统分类(二)