SQL Server的聚集索引和非聚集索引的的创建和区别以及相关问题

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 以前很少关注索引这个东西,因为这个是DBA关注的,最近看书看了一下索引 ,把一些以前不太注意的的记录一下 下面这个表格是摘自:http://www.cnblogs.com/tuyile006/archive/2009/08/28/1555615.

     以前很少关注索引这个东西,因为这个是DBA关注的,最近看书看了一下索引 ,把一些以前不太注意的的记录一下

下面这个表格是摘自:http://www.cnblogs.com/tuyile006/archive/2009/08/28/1555615.html

动作描述    使用聚集索引 使用非聚集索引
外键列   应 
主键列 
列经常被分组排序(order by)   应
返回某范围内的数据 不应
小数目的不同值 不应
大数目的不同值  不应
频繁更新的列   不应
频繁修改索引列 不应
一个或极少不同值 不应 不应

     首先看看索引是怎么创建的,我比较菜,喜欢用管理工具

创建聚焦索引

image         

选择为那个字段创建索引是通过选择的

image

非聚焦索引只需要改一下类型即可

创建了两个一个聚焦索引一个非聚焦索引

image               

书上是这么解释聚焦索引和非聚焦索引的区别

表有两种组织形式,堆或B树

当在一个表上创建聚集索引时,表组织为一个B树(平衡树),否则组织为一个堆

还有sqlserver的存储单位

页:是sqlserver存储数据的最小单位,大小为8kb

区:是由8个物理上连续的页组织成的单位

页sqlserver最小的i/o读写单位,而i/o读写中开销最大的部分是磁盘臂(disk arm)的移动,

也就是说某个查询如果需要频繁的移动磁盘臂,那查询效率就低了,

什么原因会导致磁盘臂的移动?书商还没总结完。。。。。

书还没看完,感觉索引的碎片是会触发磁盘臂移动的一个关键因素

     不同于分配顺序扫描(非聚焦索引),索引有序扫描(聚焦索引)的性能取决于索引的碎片级别,如果没有任何碎片,索引的顺序扫描的性能非常接近分配顺序扫描的性能

分配顺序扫描是按照文件进行扫描,不受逻辑碎片的影响

     任何数据的更改(删除,插入,更新)都要在保存改数据的副本的索引中反映出来,这可能会引起页拆分,和平衡树的调整,这些操作的开销可能非常高。

碎片,什么是碎片?书翻N页后发现了

      碎片是指逻辑扫描碎片、平均碎片百分比或外部碎片,这类碎片表示索引中无序页所占的百分比,无序页是根据页的物理顺序和页在索引链表中的逻辑顺序来确定的,碎片对索引有序扫描影响非常严重

有一些sql语句可以查看当前数据库中每个表包含碎片的百分比,常用与索引优化

如果需要修复碎片,就需要重建索引

所以我的理解是

任何数据的更改(删除,插入,更新)都要在保存改数据的副本的索引中反映出来,这可能会引起页拆分,和平衡树的调整,从而产生碎片

     对与聚焦索引和非聚焦索引的区别使用

动作描述    使用聚集索引 使用非聚集索引
外键列   应 
主键列 
列经常被分组排序(order by)
返回某范围内的数据 不应
小数目的不同值 不应
大数目的不同值  不应 
频繁更新的列   不应
频繁修改索引列 不应
一个或极少不同值 不应 不应

不应使用聚焦索引的两种情况(红色部分),就是因为产生了大量的碎片

那绿色的是为什么呢?我又查了一下

sqlserver 查询优化器里面

如果该查询的【选择性】足够高,优化器会会使用这个索引。

选择性是指返回行数占表总行数的百分比,高选择性是指地百分比,低选择性是指搞百分比

所以我猜绿色部分和这个【选择性】密切相关,可能低选择性会导致整表扫描

关乎非聚焦索引 在粗体字那几个环境下,为什么不建议使用,还没找到原因

尤其是一个或极少不同值 两个索引都不让用表示非常费解,那该用啥呢?用户id不就是这种情况

test
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
1天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
|
2天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
2天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
2天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
23 2
|
2天前
|
SQL Java 数据库连接
MyBatis #与$的区别以及动态SQL
MyBatis #与$的区别以及动态SQL
5 0
|
2天前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
4 0
|
2天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
3天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
4天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原
|
4天前
|
SQL 存储 安全
SQL Server 权限管理
SQL Server 权限管理