1,索引,
2,什么是索引,索引是一个单独的物理的数据结构,是一张表中包含的值的列表,注明了表的各个值所在的存储位子,
3,它是某张表中一列或多列值的集合和相应指向表中物理标识致谢值的数据页逻辑指针清单
4,主键索引, 是唯一索引的特殊类型,主键索引要求每个值是唯一的
5,聚集索引 基于记录类容在表内的排序和储存,在设置聚集索引时候数据表中数据也会按照索引顺序来存放
6,意思说,正文本身内容就是按照一定规则排列的目录称为聚集索引,聚集索引会影响物理排序,故一张表只能有一个聚集索引
7,非聚集索引, 不会影响物理排序,只是将索引建立在索引页上,查询数据时一样可以从索引中找到数据位子,
8,聚集索引就像是查字典时根据拼音查字,类容是有顺序出来的,比如查 打 字,打字下面是 大 页码一样
9,而非聚集索引就像是根据偏旁查字,比如 张 后面一个字是 驰 但他们的页码不一样
10,唯一索引, 能确保索引唯一不重复,如果给一个字段设置了唯一索引那这个字段的内容就是唯一的,和不能为空的,就算允许为空那空值都只能有一个
11,可以放在一列或读个列上可以是聚集和非聚集索引.
12,创建索引,最好在创建表的时候创建,因为如果创建唯一索引在添加数据之后,数据有重复那有可能使创建索引失败
13,先创建聚集索引再创建,非聚集索引,因为前者会改变物理位子
14,如果设置了主键则自动生成一个主键索引
15, 默认为非聚集索引
16,优点
17,保证每一行数据的唯一性
18,大大的提高效率,主要目的
19,加速表与表之间的链接实现数据的参照完整性
20,排序和分组也会因为索引提高速度
21,创建索引可以在查询过程中使用优化隐藏器,提高系统性能
22,缺点,
23,创建索引需要耗时间,随着数据量的增加而增加
24,占内存,聚集索引需要占的内存非常大
25,不利维护,对表进行增删改,也要对索引动态维护
if exists(select * from sys.databases where name ='stuDB1')
drop database stuDB1
go
create database stuDB1
go
use stuDB1
go
create table bank
(
cusId int primary key identity,
cusName nvarchar(16),
cusNo int,
cusMoney money check(cusMoney>=1 and cusMoney<100000 ) --约束规定账户里面金额不能少于1元
)
go
insert into bank values('马超',2,2000)
insert into bank values('孙权',3,1000)
--创建索引,查询用户金钱
create nonclustered index index_bank_cusMoney --默认非聚集可以不写关键字
on bank(cusMoney)
with
fillfactor = 1 --填充量为1% ,一般当要对表增加数据不要写满100%可以提高系统性能
go
--查询索引
select * from bank
with(index=index_bank_cusMoney)
where cusMoney=1000
--删除索引
drop index bank.index_bank_cusMoney
--创建唯一索引,添加相同姓名时候会失败
create unique index index_bank_cusName
on bank(cusName)
with
fillfactor =1
go
--创建聚集索引,如果已经有了主键则所有字段不能创建聚集索引
create clustered index index_bank_cusNo
on bank(cusNo)
with
fillfactor =1
go