SQL Server数据库--索引

什么是索引

描述:

汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等

我们可以根据拼音或偏旁部首,快速查找某个字词


 

SQL Server中的数据也是按页存放

索引:

是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据

索引页:

数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页

索引的作用:

通过使用索引,可以大大提高数据库的检索速度,改善数据库性能


索引类型

唯一索引

唯一索引不允许两行具有相同的索引值

主键索引

是唯一索引的特殊类型

聚集索引(Clustered)

表中各行的物理顺序与键值的逻辑(索引)顺序相同,同一张表里只可以有一个“聚集索引”

非聚集索引(Non-clustered)

非聚集索引指定表的逻辑顺序


 

如何创建索引

使用SQL Server Management Studio创建索引

使用T-SQL语句创建索引

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]  
    INDEX   index_name
     ON table_name (column_name…)
      [WITH FILLFACTOR=x]

[UNIQUE] :唯一索引

[CLUSTERED|NONCLUSTERED]:聚集索引或非聚集索引,同一张表里只可以有一个“聚集索引”

[WITH FILLFACTOR=x]:填充因子(系数):指定一个0~100之间的值,表示索引页填充的百分比

 

使用T-SQL语句删除索引

表名和索引名称之间,用“.”分隔

DROP  INDEX    table_name.index_name 

删除表时,该表的所有索引同时会被删除

 


 

 

示例

在Student表的StudentName列创建非聚集索引

USE MySchool
GO

/*--检测是否存在该索引(索引存放在系统表sysindexes中)--*/
IF EXISTS (SELECT name FROM sysindexes
          WHERE name = 'IX_Student_StudentName')
DROP INDEX Student.IX_Student_StudentName  --删除索引
GO

/*--学生姓名列创建非聚集索引:填充因子为30%--*/
CREATE NONCLUSTERED INDEX IX_Student_StudentName
   ON Student(StudentName)
       WITH FILLFACTOR = 30
GO

 

使用索引查询“李”姓的学生信息

/*----指定按索引:IX_Student_StudentName查询----*/
SELECT * FROM Student
WITH (INDEX=IX_Student_StudentName)
WHERE StudentName LIKE '李%'

 

 


 

 

索引的优缺点

优点

1.加快访问速度

2.加强行的唯一性

缺点

1.带索引的表在数据库中需要更多的存储空间

2.操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新

 


 

创建索引的指导原则

按照下列标准选择建立索引的列

1.频繁搜索的列

2.经常用作查询选择的列

3.经常排序、分组的列

4.经常用作连接的列(主键/外键)

请不要使用下面的列创建索引

1.仅包含几个不同值的列

2.表中仅包含几行


 

使用索引时注意事项

A.查询时减少使用*返回全部列,不要返回不需要的列

B.索引应该尽量小,在字节数小的列上建立索引

C.WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前

D.避免在ORDER BY子句中使用表达式

E.根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理


 

查看索引

使用系统存储过程sp_helpIndex查看有关表或视图上索引的信息

EXEC sp_helpIndex  name 
--name 可以是表名或视图名

查看Result表的索引信息 

EXEC sp_helpindex Result 

使用视图sys.indexes查看索引  

SELECT * FROM sys.indexes 

查看MySchool数据库中全部索引信息

USE MySchool
SELECT * FROM sys.indexes 

 


 

 

笔记

索引 (36字符串主键)absdhjagsjdhgasjdhg


主键索引:默认聚集索引(唯一建、聚集索引)
唯一索引

聚集索引
每张表只能有一个聚集索引,按照磁盘物理顺序 0-1 a-z


非聚集索引
每张表可以有N个非聚集索引(普通索引、唯一索引、全文索引)

 

索引:针对表的某个字段去建立


优点:帮助提高查询效率


缺点:占用物理磁盘空间

 

一般什么样的字段适合建立索引?

首要条件:经常用作查询 产品名称、产品型号


产品描述(大字段)like
唯一,字段内容小,数据重复性低

--十万级、百万级
--假如循环插入100万条数据、数据有规律可循
insert into test1
values(3,'华为手机pro20')

--后台报表啊
select * from test1
with(index=test1_name)--使用索引
where name='华为手机pro20'
--非聚集索引nonclustered
--唯一:可选unique
--创建一个唯一非聚集索引 顺序不是磁盘物理顺序
create unique nonclustered
index test1_name  --名称,确保唯一性,有意义
on test1(name)--表名+列名
with fillfactor=50 --填充因子百分比0-100之间

--假如你设计的表,不需要频繁的做添加、删除
--缺点:占空间
--57同学
--假如标明57个人
--填充因子为0
--1,2,3,4,5,6,7,8....57

--视图:查询效率是没有关系
--优点:简化查询语句
 

select * from sysindexes
where name ='test1_name'

 

posted @ 2019-03-06 11:31  cplvfx  阅读(287)  评论(0编辑  收藏  举报