zoukankan      html  css  js  c++  java
  • SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

    --索引(index)和视图(view)--




    --索引(index)--
    --概述
      数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序索引创建在数据表或者视图的字段,生成索引页,存放于数据库中。
    --分类:在SQL Server中,根据索引的作用存储方式的不同,将索引分为聚集索引非聚集索引两类
      1)聚集索引 :指数据库的物理顺序被创建索引的字段顺序完全相同。同一个数据表最多只能创建一个聚集索引。默认情况下主键自动被创建为聚集索引。聚集索引通常被创建在经常被查询的字段上,以提高查询效率。
      2)非聚集索引 :非聚集索引并不改变数据表的物理顺序,而是生成一个索引文件,用来存放索引顺序的指针地址。系统通过在索引文件中查找到的地址与数据表中的数据进行关联,进而显示查询结果。一张数据表最多允许创建254个非聚集索引,多列的复合索引最多允许创建在16个列上。

    --作用

      索引的主要作用是用来提高查询效率。在数据库的查找过程中,对于无索引的数据表,系统会从表的第一行逐渐查找到最后一行,从而找出满足条件的记录信息;而对于设置了索引的数据表,系统会先使用索引查找到数据的存储位置,找到后再到数据表中找出对应数据记录的详细信息,但满足查找条件的记录后面出现了不满足条件的记录时,系统将不再继续查找,这样无需扫描全表,从而提高查询效率

    --创建索引--
    注:由于约束属性的限制,数据表中字段被设置了主键约束和唯一约束时,将为主键约束设置唯一的聚集索引,为唯一约束设置唯一的非聚集索引。若要创建索引,可以使用管理器或者T-SQl语言。
    create [unique] [ clustered| nonclustered] index 索引名 --create表示创建,index表示索引。“索引名”须符合命名规则,且不能与已存在的索引重名。可选项unique表示唯一属性,clustered表示聚集                            属性,nonclustered表示非聚集属性。不加这两个关键字,默认为非聚集、非唯一索引。
    on 表名 (字段名1,字段名2 ...)

    例:(为 "商品管理数据库"中“商品信息表”的“商品类型名”字段创建一个名为“IX_商品类型表_商品类型名”的非聚集唯一索引)
    use 商品管理数据库
    go
    create unique nonclustered
    index IX_商品类型表_商品类型名
    on 商品类型表(商品类型名)

    --查看索引--
    exec sp_helpindex 数据表名

    例:(查看“商品管理数据库”的“商品类型表”的索引)
    use 商品管理数据库
    go
    exec sp_helpindex 商品类型表

    --修改索引--
      1)修改索引名称
    exec sp_rename '数据表名.旧索引名','新索引名'

    例:
    use 商品管理数据库
    exec sp_rename '商品类型表.IX_商品类型表_商品类型名','IX_商品类型名'

      2)修改不依赖于约束的索引属性
    “对象资源管理器”——“服务器”——“数据库”——要修改的数据库——“表”——要修改的数据表——“索引”——右键单击要修改的索引——“索引属性”——去掉“唯一”属性的选项
      3)修改依赖于约束的索引属性
    “对象资源管理器”——“服务器”——“数据库”——要修改的数据库——“表”——要修改的数据表——右键单击“设计”打开“表设计器”——右键单击“列名”选择“索引/键”——选中要修改的索引(主键约束) ,在右侧属性窗口中“表设计器”——“创建为聚集”属性——修改为“否”

    --删除索引--
    drop index 表名.索引名

    例:(删除“商品管理数据库”的“商品类型表”中名为“IX_商品类型表”的索引)
    use 商品管理数据库
    go
    drop index 商品类型表.IX_商品类型名


    --视图(view)--
    --概述
      视图是基于数据库中原始数据表(基表)而生成的虚拟表。其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据可以来源于一行或者多张基本表,也可以来源于基本表和视图的查询组合。由于视图中的数据不是真实存在而是源于基本表,因此基本表中的数据发生变化后,查看视图时视图中的查询结果也会随之发生变化。一般情况下不能通过视图修改表中数据信息,而要通过修改基本表实现。简单地说,视图即是把select语句的查询结果保存起来,以便日后使用
    --作用:1)简化操作。2)结果直观。3)提升安全。4)导出保存。
    --创建视图--
    create view 视图名 [with encryption] as select 查询语句 --create view 表示创建视图。with encryption 命令用来创建视图的代码或过程加密。as 关键字后面跟随满足select语句语法格式的查询语句。

    例:(在“商品管理数据库”中查询出2012年11月2日进货商品的信息,要求显示出商品编号、商品名称、进货数量和进货日期字段信息,将结果创建到名为“v_商品_进货”的视图中)
    use 商品管理数据库
    go
    create view vs_商品_进货成功
    as
    select 商品信息表.商品编号,商品名称,进货数量,进货日期,'进货成功' '备注' from 商品信息表,进货信息表 where 商品信息表.商品编号=进货信息表.商品编号 
    and 进货日期='2012-11-02'
    
    例:(在“商品管理数据库”中查询出商品名称中带“酒”的商品的详细销售信息(显示商品编号、商品名称、销售单价、销售数量、销售金额、客户姓名和销售日期))
    use 商品管理数据库
    go
    create view v_销售信息
    as select 商品信息表.商品编号,商品名称,销售单价,销售数量,销售金额,客户姓名,销售日期 
    from 销售信息表 
    join 商品信息表 on 销售信息表.商品编号=商品信息表.商品编号
    join 客户信息表 on 客户信息表.客户编号=销售信息表.客户编号
    where 商品信息表.商品名称 like '%酒%'
    理解例子

    --查询视图--

      1)查询视图结果
    select * | [字段名列表] from 视图名 [where 条件表达式]

    例:(查询“v_商品 _进货”视图中的商品进货信息)
    select * from v_商品_进货成功

    例:(查询“v_商品 _进货”视图中进货数量大于等于300的商品进货信息)
    use 商品管理数据库
    go
    select * from v_商品_进货成功 where 进货数量>=300

      2)查询视图创建信息
    exec sp_helptext 视图名

    例:(查看“商品管理数据库”中名为“V_商品_进货”的视图的创建信息)
    use 商品管理数据库
    go
    exec sp_helptext v_商品_进货成功

    --修改视图--
      1)修改视图名
    exec sp_rename 旧视图名,新视图名

    例:
    use 商品管理数据库
    go
    exec sp_rename v_商品_进货成功,v_商品信息_进货成功

      2)修改视图内容
    alter view 视图名 [with encryption] as select 查询语句 --alter view表示修改视图,“视图名 ”必须是已存在的视图名。其他命令与创建视图相同。

    例:(将“商品管理数据库”中名为“v_商品_进货成功”的视图内容修改为查看2012年11月1日进货记录信息)
    use 商品管理数据库
    go
    alter view v_商品_进货成功
    as
    select 商品信息表.商品编号,商品名称,进货数量,进货日期
    from 商品信息表,进货信息表
    where 商品信息表.商品编号=进货信息表.商品编号
    and 进货日期='2012-11-01'

    --删除视--
    drop view 视图名

    例:(将“商品管理数据库”中名为“v_商品_进货成功”的视图删除)
    use 商品管理数据库
    go
    drop view v_商品_进货成功


     注:"--"可看成说明或者注释文本

  • 相关阅读:
    python2与3自由切换
    ubuntu 安汉google浏览器
    ros 下常用的依赖库
    imu tool使用
    g2o 初始化
    linux 解压缩
    sudo apt-get update 没有公钥,无法验证下列签名
    ceres g2o 安装
    ubuntu 下开源安装
    Nhibernate中 Many-To-One 中lazy="proxy" 延迟不起作用的原因
  • 原文地址:https://www.cnblogs.com/xifengyeluo/p/5883744.html
Copyright © 2011-2022 走看看