2018.09.11
星期三
晴
1.索引
索引是数据表中数据和相应存储位置的列表,可以提高在表或视图中查找数据的速度。
聚集索引:
指表中数据行的物理存储顺序与索引顺序完全相同
非聚集索引:
不改变表中数据行的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系。
使用非聚集索引的情况:重复较少,数据量较少,已包含聚集索引。
区别:
聚集索引 | 非聚集索引 |
每个表只允许有一个聚集索引 | 最多可以有249个非聚集索引 |
物理的重排表中的数据以符合索引约束 | 创建一个键值列表,键值指向数据在数据页中的位置 |
用于经常查找数据的列 | 用于从中查找单个值的列 |
示例:
--创建索引
create nonclustered
index index_score
on stumarks(score)
with fillfactor=40
--查询
select StuInfo.stuid'学号',stuname'姓名',subject'科目',score'成绩' from StuInfo,StuMarks
with (index=index_score)
where StuInfo.stuid=StuMarks.stuid and score<'80'
--删除
drop index stumarks.index_score
go
2.视图
视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上的,
视图中并不存放数据,而是存放在视图所引用的原始表中,同一张原始表,根据不同用户的不同需求,可以创建不同的视图。
创建:
--创建视图
create view View_stuinfo_marks
as
select StuInfo.stuid'学号',stuname'姓名',stusex'性别',subject'科目',score'成绩'
from StuInfo,StuMarks where StuInfo.stuid=StuMarks.stuid
go
--查询所有男同学成绩
select * from View_stuinfo_marks where 性别='男'
--查询所有不及格女同学的学号、姓名及科目
select 学号,姓名,科目 from View_stuinfo_marks where 成绩<'60' and 性别='女'
go
--创建新的加密视图
create view View_stuinfo
with encryption
as
select DENSE_RANK()
over(order by sum(score) desc)'排名',stuinfo.stuid'学号',stuname'姓名',sum(score)'总成绩'
from StuInfo,StuMarks where StuInfo.stuid = StuMarks.stuid
group by StuInfo.stuid,stuname
go
--查询所有学生的总成绩排名
select * from View_stuinfo
--删除所有视图
drop view View_stuinfo_marks,View_stuinfo