第四章 索引和视图

                              第四章     索引和视图



章节目标

  • 索引可以用来做什么?
  • 如何创建索引
  • 什么是视图
  • 如何创建视图

内容

 

索引

  • 是数据表中数据和相应存储位置的列表
  • 利用索引可以提高在表或视图中查找数据的速度
  • SPL SERVER系统中,可管理的最小空间是页,一个页占有8KG的存储空间

索引主要分两类

  1. 聚集索引
  2. 非聚集索引

其他类型的索引

  • 唯一索引
  • 索引视图
  • 包含性列索引
  • 全文索引
  • XML索引等

聚集索引:表中数据行的物理存储顺序与索引顺序完全相同

非聚集索引:不改变表中数据行的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系

使用非聚集索引的情况

  1. 某个字段的数据唯一性较高
  2. 查询所得到的数据量较少
  3. 已包含聚集索引

    聚集索引和非聚集索引的区别

创建索引

    /*--聚集索引--*/
        --主键会自动生成同名聚集索引,不能再创建
        
    /*--非聚集索引--*/
        --基本语法
            --CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
            --INDEX   index_name
            --ON  table_name (column_name)
            --[WITH FILLFACTOR=x] 填充因子:指定一个0~100之间的值,表示索引页填充的百分比

 列                                          关键词   index


--如果存在该索引,先将其删除掉
IF exists(SELECT * FROM sys.indexes WHERE name = 'IX_score')
DROP INDEX stuMarks.IX_score

--对成绩字段创建非聚集索引,填充因子30%
CREATE NONCLUSTERED INDEX IX_score ON stuMarks(score) WITH FILLFACTOR= 30
GO

--使用索引
--指定按索引查询
SELECT * FROM stuMarks WITH(INDEX = IX_score)WHERE score between 60 and 90

适合创建索引的列

当数据库中的某一列被频繁的用于数据搜素时,或者该列用于对数据进行排序时可以创建成索引

不适合创建索引的列

如果列中仅有几个不同的值,或者表中仅包含几行值,则不推荐为其创建索引,为小型表创建索引可能不大划算,因为对数据量较小的表来说,在SQL SERVER中使用索引搜素数据所花的时间比直接进行表扫描所花的时间更长。

 视图

  • 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上。
  • 视图中并不存放数据,而是存放在视图所引用的原始表中
  • 同一张原始表,根据不同用户的不同需求,可以创建不同的视图。

创建视图

--基本语法
--CREATE VIEW view_name [(列名...)] 
--AS
--<SELECT语句>
--创建视图
--如果存在该视图,先将其删除掉
IF EXISTS (	SELECT * FROM sys.views WHERE NAME = 'view_stuInfo_stuMarks')
DROP VIEW view_stuInfo_stuMarks
GO

--创建名为view_stuInfo_stuMarks的视图
CREATE VIEW view_stuInfo_stuMarks(学号,姓名,成绩)
AS
SELECT stuName,stuInfo.StuID,score FROM stuInfo LEFT JOIN stuMarks 
ON stuInfo.StuID = stuMarks.StuID
GO
		
--使用视图
select * from view_stuInfo_stuMarks

加密视图

--视图加密

--查看所有视图信息
select * from information_schema.views;
EXEC sp_helptext 'view_stuInfo_stuMarks'

--加密试图
IF EXISTS (	SELECT * FROM sys.views WHERE NAME = 'view_stuInfo_stuMarks')
DROP VIEW view_stuInfo_stuMarks
GO

CREATE VIEW view_stuInfo_stuMarks(学号,姓名,成绩)
WITH encryption
AS
SELECT stuName,stuInfo.StuID,score FROM stuInfo LEFT JOIN stuMarks 
ON stuInfo.StuID=stuMarks.StuID
GO

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值