索引和视图

索引:是数据表中数据和相应储位置的列表

利用索引可以提高在表或视图中查找数据的速度

索引主要分为两类:

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


        --主键会自动生成同名聚集索引,不能再创建
       

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

使用非聚集索引的情况:1.某个字段的数据唯一性较高。2.查询所得的数据量较少。3.已经包含聚集索引.

如何使用非聚集索引:

	--基本语法
			--CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] 
			--INDEX   index_name
			--ON  table_name (column_name)
			--[WITH FILLFACTOR=x] 填充因子:指定一个0~100之间的值,表示索引页填充的百分比	--基本语法
			--CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] 
			--INDEX   index_name
			--ON  table_name (column_name)
			--[WITH FILLFACTOR=x] 填充因子:指定一个0~100之间的值,表示索引页填充的百分比

--创建索引
      

      --如果存在该索引,先将其删除掉
            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允许嵌套视图。但嵌套不得超过32层。视图最多可包含1024个字段。

不能将规则或DEEAUTLT定义与视图相关联。

定义视图的查询不能包含COMOUTE子句,COMPUTE BY子句或INTO 关键字。

定义视图的查询不能包含ORDER BY子句,除非在SELECT 语句的选择列表中还有一个TOP子句。

创建视图:

--基本语法
		--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 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值