--索引(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_商品_进货成功


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

SQL Server 索引(index) 和 视图(view) 的简单介绍和操作的更多相关文章

  1. sql server中关于批处理与脚本的简单介绍

    1.批处理 批处理指的是包含一条或多条T-SQL语句的语句组,这组语句从应用程序一次性地发送到SQL Server服务器执行.SQL Server服务器将批处理语句编译成一个可执行单元(即执行计划), ...

  2. SQL Server数据库的操作流程和连接的简单介绍

    学习ADO,免不了要跟数据库打交道,对于初学者来说,如果不整理一下整个流程,那么可能会出现很多的问题,下面简单的介绍数据库的操作流程. 1.     我们最终操作的对像是数据表,在操作数据表之前我们先 ...

  3. SQL Server索引 - 索引(物化)视图 <第九篇>

    一.索引视图基本概念 索引视图实际上是一种将一组唯一值“物化”为群集索引形式的视图,所为物化就是几乎和表一样,其数据也是会存储一份的(会占用硬盘空间,但是查询速度快,例如可以将count(),sum( ...

  4. sql server 索引总结三

    一.非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此. 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向 ...

  5. SQL Server索引总结二

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

  6. 转: SQL Server索引的维护 - 索引碎片、填充因子

    转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...

  7. SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>

    一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...

  8. SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>

    实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多), ...

  9. 如何获得SQL Server索引使用情况

    原文:如何获得SQL Server索引使用情况 原文出自: http://www.mssqltips.com/sqlservertip/1239/how-to-get-index-usage-info ...

随机推荐

  1. mybatis实战教程(mybatis in action)之四:实现关联数据的查询

    有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.我们首先创建一个Article 这个表 ...

  2. Js 根据身份证号获取年龄-性别

    参考:http://www.tuicool.com/articles/J7r2ien 方式一: $scope.GetAgeAndSexByIDNum = function (IdCardNO) { / ...

  3. 如何在ubuntu里面关掉后台的meteor

    kill -9 `ps ax | grep node | grep meteor | awk '{print $1}'` 或者远程终止服务器里面的meteor  ssh [user]@[server] ...

  4. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  5. 添加Web引用

  6. STM32串口

    状态寄存器USART_SR的复位值为0x00C0H:即 第七位发送寄存器空TXE=1和第六位发送完成TC=1寄存器为空, TC=1表明发送已完成.此时只要使能了发送空和发送完成中断就可进入中断ISR( ...

  7. Android安装apk时报错:INSTALL_FAILED_NO_MATCHING_ABIS

    问题背景 OS:无关 AS:无关 Genymotion:2.5.2 Virtual Device:Google Nexus 5 - 5.1.0 - API 22 原因分析 CPU架构不符 解决方案 对 ...

  8. W5200移植W5500驱动教程

    说明,移植例程为我按照这个教程移植的例程,测试通过.工程模板为我经常使用的一个w5500模板,可以在里面直接添加文件编程.1. 将driver文件夹中W5500文件夹和所有.c文件复制到工程/sour ...

  9. OGC学习课程

    1.引言 由于项目需要,需要学习OGC相关地图标准,包括WMS.WFS.GML.SLD等,只是国内相关书籍大家都懂的,特向Google大师请教,得一秘籍<Open Web Mapping> ...

  10. 用iptables 实现本地端口转发

    设定本机2121端口转发到21端口 iptables -t nat -A PREROUTING -p tcp -i eth0 -d -j DNAT --to iptables -t nat -I PO ...