Ø 索引

1、 什么是索引

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

2、 索引分类

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

# 聚集索引

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

# 非聚集索引

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

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

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

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

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

聚集索引

非聚集索引

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

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

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

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

用于经常查找数据的列

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

# 其他类型索引

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

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

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

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

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

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

3、 创建索引

语法

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

unique唯一索引

clustered聚集索引

noclustered非聚集索引

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

示例

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

4、 适合的创建索引的列

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

5、 不适合创建索引的列

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

Ø 视图

1、 什么是视图

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

2、 创建视图准则

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

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

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

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

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

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

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

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

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

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

3、 创建视图

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

4、 修改视图

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

5、 加密视图

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

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

SqlServer 索引和视图的更多相关文章

  1. SQLServer 索引以及视图

    业务 主键: 索引: 锁: ========================================= 一个页分为 页头 页体--存储行 页尾 页是有固定大小的,但是数据不一定存满,有可能产生 ...

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

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

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

    首先明确数据库对象的定义:数据库对象定义数据库内容的结构.它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本. 常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程, ...

  4. SQLserver学习(四)——T-SQL编程之事务、索引和视图

    今天来分享下T-SQL高级编程中的事务.索引.视图,可以和之前的SQL server系列文章结合起来. 一.事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个 ...

  5. SqlServer索引的原理与应用

    索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...

  6. 认识SQLServer索引以及单列索引和多列索引的不同

     一.索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使 ...

  7. mssql sqlserver 索引专题

    摘要: 下文将详细讲述sql server 索引的相关知识,如下所示: 实验环境: sql server 2008 R2 sqlserver索引简介: mssql sqlsever 索引分类简介 ms ...

  8. sqlserver 索引的结构及其存储,索引内容

    sqlserver 索引的结构及其存储,sql server索引内容 文章转载,原文地址: http://www.cnblogs.com/panchunting/p/SQLServer_IndexSt ...

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

    索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...

随机推荐

  1. Billboard 题解 hdu2795

    Billboard 题解 hdu2795 题意 有个广告牌,上面需要依次贴广告,广告的高度均为1,但是宽度不同,每次都想贴在最靠左上的位置,按照顺序进行广告的话,输出每个广告位于广告牌的高度. 解题思 ...

  2. linux驱动模型——platform(1)

    一.驱动模型包含什么? 1.1. 类class 1.1.2. 它能够自动创建/dev下的设备节点,不需要mknod /dev/xxx c x x创建.当然class还有其另外的作用,且自动创建设备节点 ...

  3. 实现类似add(1)(2)(3)结果为6的效果

    前两天看到一个问题说怎样实现add方法实现add(1)(2)(3)结果为6,于是开始引发了我的思考. 1.想要实现add()()这样调用方式,add()方法的返回值务必是一个函数 function a ...

  4. 错误提示控件errorProvider

    http://www.cnblogs.com/suguoqiang/archive/2012/07/17/2596564.html 错误提示控件errorProvider VS显示: 核心代码: th ...

  5. JSP2的自定义标签和方法

    Jsp2的自定义标签 Jsp2 开发标签库的几个步骤: 开发自定义标签处理类. 建立一个*.tld文件,每个tld文件对应一个标签库,每个标签库可对应多个标签. 在jsp文件中使用自定义标签 空标签 ...

  6. VUE CLI3.X 创建项目

    Node.js环境搭建 Node.js基于V8引擎,可以让js代码脱离浏览器运行 Vue CLI3.0 需要Node.js 8.9或者更高版本. 用nvm或者nvm-windows在同一台电脑中管理多 ...

  7. linux下挂载U盘方法

    1.使用 cat /proc/partitions 查看系统现在有哪些分区:[root@localhost ~]# cat /proc/partitions major minor  #blocks  ...

  8. python面向对象--包装标准类型及组合方式授权

    # 实现授权是包装的一个特性.包装一个类型通常是对已存在的类型进行一些自定义定制, # 这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变. # 授权的过程,其实也就是所有的更新功能都 ...

  9. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number (莫队)

    题目链接:http://codeforces.com/contest/617/problem/E 题目大意:有n个数和m次查询,每次查询区间[l, r]问满足ai ^ ai+1 ^ ... ^ aj ...

  10. [Luogu1436]棋盘分割(动态规划)

    [Luogu1436]棋盘分割 题目背景 无 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后, ...