SqlServer 索引和视图

Ø 索引

1、 什么是索引

索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。

2、 索引分类

数据库中索引主要分为两类:聚集索引和非聚集索引。SQL Server 2005还提供了唯一索引、索引视图、全文索引、xml索引等等。聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。

# 聚集索引

聚集索引是值表中数据行的物理存储顺序和索引的存储顺序完全相同。聚集索引根据索引顺序物理地重新排列了用户插入到表中的数据,因此,每个表只能创建一个聚集索引。聚集索引经常创建在表中经常被搜索到的列或按顺序访问的列上。在默认情况下,主键约束自动创建聚集索引。

# 非聚集索引

非聚集索引不改变表中数据列的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系。

非聚集索引没有改变表中物理行的位置,索引可以在以下情况下使用非聚集索引:

一、如果某个字段的数据唯一性比较高

二、如果查询所得到的数据量比较少

聚集索引和非聚集索引的区别:


聚集索引


非聚集索引


每个表只允许创建一个聚集索引


最多可以有249个非聚集索引


物理的重排表中的数据以符合索引约束


创建一个键值列表,键值指向数据在数据页中的位置


用于经常查找数据的列


用于从表中查找单个值的列

# 其他类型索引

除了以上索引,还有以下类型索引:

a、 唯一索引:如果希望索引键都不同,可以创建唯一索引。聚集索引和非聚集索引都可以是唯一索引。

b、 包含新列索引:索引列的最大数量是16个,索引列的字节总数的最高值是900。如果当多个列的字节总数大于900,切又想在这些劣种都包含索引是,可以使用包含性列索引

c、 视图索引:提供视图查询效率,可以视图的索引物理化,也就是说将结果集永久存储在索引中,可以创建视图索引。

d、 XML索引:是与xml数据关联的索引形式,是XML二进制blob的已拆分持久表示形式

e、 全文索引:一种特殊类型的基于标记的功能性功能,用于帮助在字符串中搜索赋值的词

3、 创建索引

语法

create [unique] [clustered | noclustered]
index index_name
on table_name (column_name ...)
[with fillfactor=x]

unique唯一索引

clustered聚集索引

noclustered非聚集索引

fillfactor填充因子大小,范围在0-100直接,表示索引页填满的空间所占的百分比。

示例

if (exists (select * from sys.indexes where name = ‘idx_stu_name‘))
    drop index student.idx_stu_name
go
create index idx_stu_name
on
student(name);
 
--联合索引
if (exists (select * from sys.indexes where name = ‘idx_uqe_clu_stu_name_age‘))
    drop index student.idx_uqe_clu_stu_name_age
go
create unique clustered index idx_uqe_clu_stu_name_age
on student(name, age);
 
if (exists (select * from sys.indexes where name = ‘idx_cid‘))
    drop index student.idx_cid
go
 
if (exists (select * from sys.indexes where name = ‘idx_cid‘))
    drop index student.idx_cid
go
 
--非聚集索引
create nonclustered index idx_cid
on
student (cid)
with fillFactor = 30;    --填充因子
 
--聚集索引
if (exists (select * from sys.indexes where name = ‘idx_sex‘))
    drop index student.idx_sex
go
create clustered index idx_sex
on
student(sex);
 
--聚集索引
if (exists (select * from sys.indexes where name = ‘idx_name‘))
    drop index student.idx_name
go
create unique index idx_name
on
student(name);

4、 适合的创建索引的列

当数据库的某一列被频繁的用于数据库查询时,或者该列用于数据库进行排序时可以创建成索引

5、 不适合创建索引的列

如果列中有几个不同的值,或者表中仅包含几行值,则不推荐为其创建索引。因为索引在搜索数据所花的时间比在表中逐行搜索话的时间更长。

Ø 视图

1、 什么是视图

视图就是一个虚拟的数据表,该数据表中的数据记录是有一条查询语句的查询结果得到的。

2、 创建视图准则

创建视图需要考虑一下准则:

# 视图名称必须遵循标识符的规则,该名称不得与该架构的如何表的名称相同

# 你可以对其他视图创建视图。允许嵌套视图,但嵌套不得超过32层。视图最多可以有1024个字段

# 不能将规则和default定义于视图相关联

# 视图的查询不能包含compute子句、compute by子句或into关键字

# 定义视图的查询不能包含order by子句,除非在select 语句的选择列表中还有top子句

下列情况必须指定视图中每列的名称:

# 视图中的如何列都是从算术表达式、内置函数或常量派生而来

# 视图中有两列或多列具有相同名称(通常由于视图定义包含联接,因此来自两个或多个不同的列具有相同的名称)

# 希望视图中的列指定一个与其原列不同的名称(也可以在视图中重命名列)。无论是否重命名,视图列都回继承原列的数据类型

3、 创建视图

--创建视图
if (exists (select * from sys.objects where name = ‘v_stu‘))
    drop view v_stu
go
create view v_stu
as
select id, name, age, sex from student;

4、 修改视图

alter view v_stu
as
select id, name, sex from student;
 
alter view v_stu(编号, 名称, 性别)
as
    select id, name, sex from student
go
select * from v_stu;
 
select * from information_schema.views;

5、 加密视图

--加密视图
if (exists (select * from sys.objects where name = ‘v_student_info‘))
    drop view v_student_info
go
create view v_student_info
with encryption --加密
as
    select id, name, age from student
go
--view_definition is null
select * from information_schema.views 
where table_name like ‘v_stu‘;

原文地址:http://www.cnblogs.com/hoojo/archive/2011/07/18/2109291.html

原文地址:https://www.cnblogs.com/ztb123/p/9374486.html

时间: 2024-10-08 07:13:12

SqlServer 索引和视图的相关文章

SQLServer 索引以及视图

业务 主键: 索引: 锁: ========================================= 一个页分为 页头 页体--存储行 页尾 页是有固定大小的,但是数据不一定存满,有可能产生碎片,就是行跨页 ========================================= 排序: 存储是排序的 索引维护成本要低:所以在修改量与索引维护有关. 全表扫描: 数据存储在硬件上可能不是连续的....... 查询优化器: 为什么会自动优化SQL,因为数据库里面存储了一些统计信息

SQLServer中在视图上使用索引(转载)

在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你查询它之前,视图并不做任何事情. 索引视图 在SQL Server 2000和2005中,你能够给视图增加索引.但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立一个索引呢?嗯,这比较麻烦. 索引视图是一个已被物化或保存在数据库中的视图.当基本表更新时,给视

sqlserver数据库的索引、视图和触发器

  Sqlserver数据库的索引.视图和触发器 数据库的索引类似于字典中的目录,无需阅读.可以直接利用目录快速查找所需要的信息 索引的种类: 聚集索引:反应的是数据存储的物理顺序,一个表只能包含一个聚集索引 非聚集索引:不反应数据存储的物理顺序,一个表可以有多个非聚集索引 1.1. 准备环境 1.1.1. 创建聚集索引 目前tstudent表中没有任何索引也没有主键 为tstudent表创建聚集索引 选中studentID,单击左上侧的主键按钮 为Tstuden表的studentID创建主键就

【整理】SQLServer查询各种数据库对象(表,索引,视图,图表,存储过程等)

首先明确数据库对象的定义:数据库对象定义数据库内容的结构.它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本. 常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程,函数等 1.sys.objects视图 数据库中创建的每一个对象都对应表中的一行,但不包括DDL触发器,查询触发器应该使用sys.triggers 常见的不同类型对象在sys.objects中的区分: 类型 type列 type_desc列 FOREIGN KEY 约束 F FOREIGN_KEY_

[转]SqlServer索引的原理与应用

索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书.在数据库中,数据库程序使用索引可以重啊到表中的数据,而不必扫描整个表.书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表. 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因

SqlServer索引的原理与应用

原文 索引的概念 索引的用途 我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么 数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书.在数据库中,数据库程序使用索引可以重啊到表中的数据,而不必扫描整个表.书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表. 索引的利弊 查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫

数据库的数据类型、约束、索引、视图

数据库的数据类型.约束.索引.视图 一.数据类型 (一)数值型数据 整数 int,bigint,smallint 小数 float,real,decimal(长度,精度),numeric(长度,精度) 常用的:float(相当于C#中的double),decimal (二)字符数据 char(n) 最大存储量:8000英文字符,4000汉字:数量一定的字符用char(n)如身份证.学号,用n限制字符数量输入: varchar(n) 最大存储量:8000英文字符,4000汉字: 数量变化的字符用v

SQLServer索引

SQLServer索引1.聚集和非聚集索引聚集索引:根据聚集索引进行排序,非聚集索引因为不根据索引键排序,所以聚集索引比非聚集索引快(一个表只有一个聚集索引)2.唯一索引和非唯一索引唯一索引时值不能重复 建立索引的原则:1) 定义主键的数据列一定要建立索引.2) 定义有外键的数据列一定要建立索引.3) 对于经常查询的数据列最好建立索引.4) 对于需要在指定范围内的快速或频繁查询的数据列;5) 经常用在WHERE子句中的数据列.6) 经常出现在关键字order by.group by.distin

SQLserver中的视图与主外键的创建

一.背景 原来学过数据库的相关内容,只是形式上的,从来也没有实践过,徐徐飘过而已,如今在做机房时,很多知识需要用到视图,才开始去慢慢的实践. 视图:我理解的就是一张表,它把我们所需要的某个表或某几个表中的部分信息提取出来,形成了一张临时的表. 它主要有两个优点:1.简单,它呈现给我们的数据就是我们想要的数据,没有多余的. 2.安全,提供给用户它们权限范围内的数据 我为什么会用到视图?举一个简单的例子,在查询用户信息时,我们可能会用到两张表中的内容.那么这个时候我就需要将两张表中我需要的数据提取出