SQLSERVER索引

SQLserver 索引

在解释什么是索引之前,先介绍一下SQLsever 访问数据的方式
1、全表扫描:查询表中的每一行(表中的数据全都查询出来),当发现和查询条件匹配的行时,就返回到结果集中 。
2、使用索引:当查询的表建有索引时,且查询的走的是索引查询,那么表查询时不会去把表里所以的数据都查询出来,只会匹配一部分。
例:查找书中的内容(查找高中数学中的正玄函数部分)
1、全表扫描查找方式:一页一页的核对,只要有正玄函数的部分都给查找出来,必须要把这个本书的所有页码都进行核对,然后反馈(没有给数学书建目录)
2、索引:将数学书按照一定得顺序排列好并标注好对应模块的目录页码(建索引需要做的事),查询的时候直接把数学书的目录进行对比,然后找到对应的内容,这样就不用把整本书都查找完,效率肯定比全表扫描快的多(前提是:表的数据量足够大,当表的数据很少很少时,索引要比全表扫描慢)

一、什么是索引(索引什么?)

索引定义:索引是一种单独的、物理的对数据库表一列或多列的值进行排序的一种 存储结构,它是某表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引:(自己的理解)给数据行建一个查找目录,查找数据行时可以根据目录(索引)快速的定位到数据行,从而到达 提高查询效率 的目的。
1、元数据:管理数据的数据
2、平衡树(B-树)结构理解:
例: 以书为例,将书分为:一级目录、二级目录、三级目录、具体内容标题和具体的内容;那么B-树对应的书的目录为:
根节点:一级目录
非叶级数据:二级目录、三级目录
叶级数据:具体内容标题和具体的内容

二、索引的分类

1、按存储结构分类
a、聚集索引:对表中的列或者多列进行排序,这种排序是物理磁盘上的排序。索引键直接指向叶级别数据。(查询出来的数据是按照索引列进行排序好的,索引键也是这查询出来的顺序)

补充说明
01:一个表只有唯一的一个聚集索引,SQLSERVER 在创建主键的适候会默认的给表创建一个聚集索引。
02:堆表:没有建聚焦索引的表(数据没有任何排序,是乱放的像堆在一起的一样说以叫堆表)
03:聚集表:建有聚集索引的表
04:数据和聚集索引存储在同一个存储位置下

b、非聚集索引:独立于数据行结构,包含非聚集索引键。它也遵循B-树原理,聚集表中:索引行(行定位器)对应聚集索引键;堆表:索引行(行定位器)对应数据行的指针

补充说明
01:一个表可以有多个非聚集索引
02:

2、按数据唯一性区分类

a、唯一索引:索引键对应唯一的一条数据(创建了唯一约束,系统将自动创建唯一索引);索引列上增加了一层唯一约束。
b、非唯一索引:没有添加唯一约束的索引

3、按创建索引字段数量分类

a、单列索引(单一索引):用一个字段建的索引(一个索引涉及一个字段)
b、多列索引(复合索引):用多个字段建的索引(一个索引涉及多个字段)
补充说明
转载一个复合索引的效率和使用说明希望对大家有帮助:
sql复合索引使用和注意事项.

三、索引与主键

主键:是一个约束,确定数据行为唯一的一行数据
索引:提高查询效率
SQLsever 在设置主键是会默认的给一个聚焦索引,但就算是聚集索引是可以建在一个有重复数据的字段上的,就算有重复数据,数据库也会给它们一个排序然后给一个对应的索引键。

四、哪些地方可以用索引

1、经常用于查询的列
2、用于where条件后的列
3、用于on关联的列(外键)
4、group by,order by后面的字段

五、不建议建索引

1、表的查询次数少,插入修改多
2、表的数据量不大
3、定义为text、image和bit的数据类型的列(其中包括数据字典中类型比较少的字段,例如性别,只有男、女两个)
4、不经常查询的字段

六、索引语句

1、创建索引语句

CREATE [UNIQUE][CLUSTERED|NONCLUSTERED]
INDEX 索引名 ON 表名(列名[ASC|DESC])
--解释
--UNIQUE ---->创建唯一索引(唯一约束)
--CLUSTERED ---->创建聚集索引
--NONCLUSTERED ---->创建非聚集索引
--ASC|DESC ---->索引列排序方式,不填写默认为升序(ASC)

2、查询索引

--查询表中有哪些索引
EXEC SP_HELPINDEX 表名

3、删除索引语句

--删除索引
1、方式一
DROP INDEX 表名.索引名称
2、方式二
USE [数据库名]
DROP INDEX [索引名称] ON [表名]
3、例外:(当索引是通过创建约束创建的索引时用以下的语句)
ALTER TABLE [表名] DROP CONSTRAINT [索引名称]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值