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_商品_进货成功
注:"--"可看成说明或者注释文本
SQL Server 索引(index) 和 视图(view) 的简单介绍和操作的更多相关文章
- sql server中关于批处理与脚本的简单介绍
1.批处理 批处理指的是包含一条或多条T-SQL语句的语句组,这组语句从应用程序一次性地发送到SQL Server服务器执行.SQL Server服务器将批处理语句编译成一个可执行单元(即执行计划), ...
- SQL Server数据库的操作流程和连接的简单介绍
学习ADO,免不了要跟数据库打交道,对于初学者来说,如果不整理一下整个流程,那么可能会出现很多的问题,下面简单的介绍数据库的操作流程. 1. 我们最终操作的对像是数据表,在操作数据表之前我们先 ...
- SQL Server索引 - 索引(物化)视图 <第九篇>
一.索引视图基本概念 索引视图实际上是一种将一组唯一值“物化”为群集索引形式的视图,所为物化就是几乎和表一样,其数据也是会存储一份的(会占用硬盘空间,但是查询速度快,例如可以将count(),sum( ...
- sql server 索引总结三
一.非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此. 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向 ...
- SQL Server索引总结二
从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...
- 转: SQL Server索引的维护 - 索引碎片、填充因子
转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...
- SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>
一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...
- SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>
实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多), ...
- 如何获得SQL Server索引使用情况
原文:如何获得SQL Server索引使用情况 原文出自: http://www.mssqltips.com/sqlservertip/1239/how-to-get-index-usage-info ...
随机推荐
- Install CodeBlocks in CentOS 7
- For now, CodeBlocks doesn't privide binary packages for CentOS7.(http://www.codeblocks.org/downloa ...
- Nginx去除版本号
1.在配置文件中的 http节点中加入server_tokens off; 2.更改源码隐藏nginx软件的名称 1). 查看Nginx编译的参数/usr/local/nginx/sbin/nginx ...
- How Garbage Collection Really Works
Java Memory Management, with its built-in garbage collection, is one of the language's finest achiev ...
- Visual Studio 插件AnkhSvn 更改Svn URL和登录信息
AnkhSvn配置文件:%AppData%\Subversion\auth\ 删除这个文件夹中所有内容 然后连接,重新设置相关信息 设置静态地址 设置路由器 以TP-LINK路由器为例,其他路由器类似 ...
- eclipse @override注解出错
在工程中新建了一个接口,定义了一个methodA,然后写一个接口类实现该方法,并加上@override注解 项目提示@override出错,必须覆盖原方法XXX,解决办法 1)项目右键-project ...
- MVC 访问IFrame页面Session过期后跳转到登录页面
Web端开发时,用户登录后往往会通过Session来保存用户信息,Session存放在服务器,当用户长时间不操作的时候,我们会希望服务器保存的Session过期,这个时候,因为Session中的用户信 ...
- go 版本 gRPC 环境搭建(3.0正式版)
之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下: 安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...
- 使用nginx部署Yii 2.0\yii-advanced-app-2.0.6
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- 黑马程序员_ C语言基础之指针(三)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移 ...
- Python-5 数据类型、操作符
#1 数值类型: 整型int.浮点型float(科学记数法 e 或 E).布尔型bool #2 字符串: 与整型.浮点型转化:int()--截断处理 float() str() #3 获取数据类型: ...