好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SQLServer有关索引和视图的简单介绍

索引 1、 什么是 索引 索引 就是数据表中数据和相应的存储位置的列表,利用 索引 可以提高在表或 视图 中的查找数据的速度。 2、 索引 分类 数据库中 索引 主要分为两类:聚集 索引 和非聚集 索引 。SQL Server 2005还提供了唯一 索引 、 索引 视图 、全文

索引

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' ; 

查看更多关于SQLServer有关索引和视图的简单介绍的详细内容...

  阅读:34次