索引和视图

索引

在stumarks表中 由于成绩字段score 经常会被搜素,而且成绩字段唯一性较高,为了提高搜素效我们现在weiStumarks 表中的score子段建立非聚集索引

索引的分类

聚集索引   非聚集索引   唯一索引   索引视图   包含性索引   全文索引      XML索引等

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

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

适合创建索引的列 :

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

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

使用非聚集索引的情况

某个字段的数据唯一性较高

查询所得到的数据量较少

已经包含聚集索引


使用索引可以加快数据访问速度
聚集索引制定表中数据的存储顺序
非聚集索引制定表的逻辑顺序
使用CREATE INDEX 可以为制定的表创建索引

/*--聚集索引--*/
        --主键会自动生成同名聚集索引,不能再创建
        
    /*--非聚集索引--*/
        --基本语法
            --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个字段

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

定义视图的查询不能包含compute子句,compute by 子句或into关键字

定义视图的查询不能包含order by子句,除非在select语句的选择列表中还有一个top子句

 

 

select * from stuinfo where stusex = '男'
    --基本语法
        --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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值