设为首页 收藏本站
查看: 971|回复: 0

[经验分享] SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

[复制链接]

尚未签到

发表于 2017-7-13 23:14:03 | 显示全部楼层 |阅读模式
  --索引(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语句语法格式的查询语句。


DSC0000.gif DSC0001.gif


例:(在“商品管理数据库”中查询出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_商品_进货成功

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393600-1-1.html 上篇帖子: sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转] 下篇帖子: ADO.NET实现对SQL Server数据库的增删改查
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表