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 ...
随机推荐
- Inno Setup制作安装包的几个问题
1. 卸载时,如何判断应用程序是否运行 InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称.现在很多应用程序都是唯一实例运行.这样避免配置文件被错误修改以及其他很多衍 ...
- 浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- 从委托到Lambda
写下这篇文章的时候已经是工作三年,突然发现自己从始至终都没有学习过任何东西,突然想学点东西又不知道从何而写那只能一个个基础重新学习. 委托 什么是委托? 委托是一个类,它定义了方法的类型,使得可以将方 ...
- Ubuntu1404 (1)
0.初始设置 (1)开户root账号并重启系统: sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf, 添加greeter-show ...
- css的简写规范
css简写有这么几个好处,第一个也是最大的好处就是减少了代码的数量.第二个就是方便自己的编写吧. 下面来介绍几个常见的css属性简写规则. 一.字体(font) font-style:设置字体的样式. ...
- 从高处理解android与服务器交互(看懂了做开发就会非常的容易)
今天帮一个朋友改一个bug 他可以算是初学者吧 .我给他看了看代码,从代码和跟他聊天能明显的发现他对客户端与服务器交互 基本 不是很了解.所以我花了更多时间去给他讲客户端与服务器的关系.我觉得从这个高 ...
- VS2013环境问题
1.多字节支持问题,多字节默认(GB2312格式),需要安装一个补丁: https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=40 ...
- 在 Arch Linux 玩百度 Flash 战曲游戏乱码
#!/bin/sh #From: http://hi.baidu.com/imtinge/item/3516761d314481542b3e22f0 #Info: CJK Unicode font M ...
- QT学习(打个广告)
最近全面学习QT与c++,希望同行能够指教,于是打算建个群QQ群:85439482,欢迎大家,本群主要专注于QT皮肤库积累,软件架构以及标准c++学习.