• SQL数据库—<5>视图、索引…简单学习


    视图

    掌握:
    1.视图是个什么东西?
    2.会建视图,会查视图
    3.知道视图的主要功能是查询,不是增删除改。


    视图的定义:

          视图可以认为是从一个数据表或者多个数据表中导出的表,视图本身没有任何数据,它是用来存放视图的定义,因此视图只是虚拟表;如果数据表中的数据记录发生变化,那么跟该表有关的视图也会发生相应的变化。

    视图——相对应的是表查询结果。
    表——真正存储数据的地方。
    视图——不存数据,展示查询的结果。

    视图的作用:

        1、提高数据访问的安全性
        2、方便查询操作
       
    创建视图:create view 视图名 as ... go(视图名、:例view_...)
    调用视图:select * from 视图名
    删除视图:drop view 视图名

    视图分为:单表创建的视图、多表视图、函数或者分组数据视图、基于视图创建的视图、只读视图等·····

    视图为了查询数据方便。一般不要试图向视图中插入数据,容易出错。

     小结

    小结:创建视图主要是从安全性和简化查询方面考虑,创建一个视图可以是一个数据表,可以是多个数据表,也可以是一个已有的视图···视图可以像数据表一样,进行查询和更新操作,可以使用select语句对视图进行查询操作,视图的查询操作与数据表的查询操作相同。也可以使用insert、update、delete语句对视图中的数据进行更新操作。这里暂时不做研究···


    Ø 视图 
    1、 什么是视图 
    视图就是一个虚拟的数据表,该数据表中的数据记录是有一条查询语句的查询结果得到的。 
    2、 创建视图准则 
    创建视图需要考虑一下准则: 
    # 视图名称必须遵循标识符的规则,该名称不得与该架构的如何表的名称相同 
    # 你可以对其他视图创建视图。允许嵌套视图,但嵌套不得超过32层。视图最多可以有1024个字段 
    # 不能将规则和default定义于视图相关联 
    # 视图的查询不能包含compute子句、compute by子句或into关键字 
    # 定义视图的查询不能包含order by子句,除非在select 语句的选择列表中还有top子句 
    下列情况必须指定视图中每列的名称: 
    # 视图中的如何列都是从算术表达式、内置函数或常量派生而来 
    # 视图中有两列或多列具有相同名称(通常由于视图定义包含联接,因此来自两个或多个不同的列具有相同的名称) 
    # 希望视图中的列指定一个与其原列不同的名称(也可以在视图中重命名列)。无论是否重命名,视图列都回继承原列的数据类型 
    3、 创建视图 
    --创建视图
    if (exists (select * from sys.objects where name = 'v_stu'))
        drop view v_stu
    go
    create view v_stu
    as
    select id, name, age, sex from student;
    4、 修改视图 
    alter view v_stu
    as
    select id, name, sex from student;
     
    alter view v_stu(编号, 名称, 性别)
    as
        select id, name, sex from student
    go
    select * from v_stu;
     
    select * from information_schema.views;
    5、 加密视图 
    --加密视图
    if (exists (select * from sys.objects where name = 'v_student_info'))
        drop view v_student_info
    go
    create view v_student_info
    with encryption --加密
    as
        select id, name, age from student
    go
    --view_definition is null
    select * from information_schema.views 
    where table_name like 'v_stu';
    转载来自网络--地址

    索引


    掌握:

    什么是索引
    1.索引是什么东西。
    2.索引分类及效率。原理。
    3.索引提升查询效率,但会影响增删改的效率。

    索引的使用
    4.如何建索引、删索引。

    什么是索引


    索引:为了提高查询效率。

    分类:簇索引、非簇索引

    1.数据的默认存储次序跟簇索引的次序一样的。一个表中只有能有一个簇索引。

    2.非簇索引是单独放置的,查询的时候,先查非族索引,再跟据非簇索引查询内容。,一个表可以有多个非簇索引。

    索引的使用

    创建索引:create index 索引名(IX_…)  on 表(列,[列]); go


    Ø 索引 
    1、 什么是索引 
    索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。 
    2、 索引分类 
    数据库中索引主要分为两类:聚集索引和非聚集索引。SQL Server 2005还提供了唯一索引、索引视图、全文索引、xml索引等等。聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。 
    # 聚集索引 
    聚集索引是值表中数据行的物理存储顺序和索引的存储顺序完全相同。聚集索引根据索引顺序物理地重新排列了用户插入到表中的数据,因此,每个表只能创建一个聚集索引。聚集索引经常创建在表中经常被搜索到的列或按顺序访问的列上。在默认情况下,主键约束自动创建聚集索引。 
    # 非聚集索引 
    非聚集索引不改变表中数据列的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系。 
    非聚集索引没有改变表中物理行的位置,索引可以在以下情况下使用非聚集索引: 
    一、如果某个字段的数据唯一性比较高 
    二、如果查询所得到的数据量比较少 
    聚集索引和非聚集索引的区别: 
    

    聚集索引

    非聚集索引

    每个表只允许创建一个聚集索引

    最多可以有249个非聚集索引

    物理的重排表中的数据以符合索引约束

    创建一个键值列表,键值指向数据在数据页中的位置

    用于经常查找数据的列

    用于从表中查找单个值的列

    # 其他类型索引 
    除了以上索引,还有以下类型索引: 
    a、 唯一索引:如果希望索引键都不同,可以创建唯一索引。聚集索引和非聚集索引都可以是唯一索引。 
    b、 包含新列索引:索引列的最大数量是16个,索引列的字节总数的最高值是900。如果当多个列的字节总数大于900,切又想在这些劣种都包含索引是,可以使用包含性列索引 
    c、 视图索引:提供视图查询效率,可以视图的索引物理化,也就是说将结果集永久存储在索引中,可以创建视图索引。 
    d、 XML索引:是与xml数据关联的索引形式,是XML二进制blob的已拆分持久表示形式 
    e、 全文索引:一种特殊类型的基于标记的功能性功能,用于帮助在字符串中搜索赋值的词 
    3、 创建索引 
    语法 
    create [unique] [clustered | noclustered]
    index index_name
    on table_name (column_name ...)
    [with fillfactor=x]
    unique唯一索引 
    clustered聚集索引 
    noclustered非聚集索引 
    fillfactor填充因子大小,范围在0-100直接,表示索引页填满的空间所占的百分比。 
    示例 
    if (exists (select * from sys.indexes where name = 'idx_stu_name'))
        drop index student.idx_stu_name
    go
    create index idx_stu_name
    on
    student(name);
     
    --联合索引
    if (exists (select * from sys.indexes where name = 'idx_uqe_clu_stu_name_age'))
        drop index student.idx_uqe_clu_stu_name_age
    go
    create unique clustered index idx_uqe_clu_stu_name_age
    on student(name, age);
     
    if (exists (select * from sys.indexes where name = 'idx_cid'))
        drop index student.idx_cid
    go
     
    if (exists (select * from sys.indexes where name = 'idx_cid'))
        drop index student.idx_cid
    go
     
    --非聚集索引
    create nonclustered index idx_cid
    on
    student (cid)
    with fillFactor = 30;    --填充因子
     
    --聚集索引
    if (exists (select * from sys.indexes where name = 'idx_sex'))
        drop index student.idx_sex
    go
    create clustered index idx_sex
    on
    student(sex);
     
    --聚集索引
    if (exists (select * from sys.indexes where name = 'idx_name'))
        drop index student.idx_name
    go
    create unique index idx_name
    on
    student(name);
    4、 适合的创建索引的列 
    当数据库的某一列被频繁的用于数据库查询时,或者该列用于数据库进行排序时可以创建成索引 
    5、 不适合创建索引的列 
    如果列中有几个不同的值,或者表中仅包含几行值,则不推荐为其创建索引。因为索引在搜索数据所花的时间比在表中逐行搜索话的时间更长。
    
    摘录网络--地址

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件 664507902@qq.com联系,我将以第一时间删除相关内容。

  • 相关阅读:
    A1035
    A1005
    A1073
    A1061
    A1058
    A1027
    A1019
    Java 操作临时文件创建与删除
    面试必会之HashMap源码分析
    springboot整合cxf框架启动报错
  • 原文地址:https://www.cnblogs.com/ooip/p/4542873.html
  • Copyright © 2020-2023  润新知