SQL Server--索引

标签: sql server 索引 | 发表时间:2012-07-30 15:47 | 作者:liujiahan629629
出处:http://blog.csdn.net

一,索引的概述

 

         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力.

 

      2,优缺点:

            2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因.

                            2,创建唯一性索引,保证数据库表中每一行数据的唯一性.

                            3,加速表与表之间的连接,特别是在实现数据的参考完整性方面特别有意义.

                            4,在使用分组和排序子句进行数据检索时,同样可以减少其使用时间.

            2,2缺点:  1,索引需要占用物理空间,聚集索引占的空间更大.

                            2,创建索引和维护索引需要耗费时间,这种时间会随着数据量的增加而增加.

                            3,当向一个包含索引的列的数据表中添加或者修改记录时,SQL server 会修改和维护相应的索引,这样增加系统的额外开销,降低处理速度。

 

    3,索引的分类:

             1,按存储结构可分为:

                      a,聚集索引:指物理存储顺序与索引顺序完全相同,它由上下两层组成,上层为索引页,下层为数据页,只有一种排序方式,因此每个表中只能创建一个聚集索引。

                      b,非聚集索引:指存储的数据顺序一般和表的物理数据的存储结构不同。通过下表我们可以分析出:(其中在学号上建立非聚集索引)

              2,根基索引键值是否唯一,可以判定是否为唯一索引;基于多个字段的组合创建索引的为组合索引。

 

 

二,索引的操作:

 

        1,创建:(1),原则:a,只有表的所有者可以在同一个表中创建索引;

                                                     b,每个表中只可以创建一个聚集索引;

                                                     c,每个表中最多可以创建249个非聚集索引;    

                                                     d,在经常查询的字段上建立索引;

                                                     e,定义text,image和bit数据类型的裂伤不能创建索引;

                                                     f,在外键列上可以创建索引,主键上一定要有索引;

                                                     g,在那些重复值比较多的,查询较少的列上不要建立索引。

                      (2),方法:a,使用SQL server Management Studio创建索引。

                                                  b,使用T-SQL语句中的create Index语句创建索引

                                                  c,使用Create table或者alter Table语句为表列定义主键约束或者唯一性约束时,会自动创建主键索引和惟一索引。

                   这里说说T-sql语句创建索引:

                    语法:

create relational index create[unique][clustered|nonclustered]   index index_name  on<object>(cloumn[asc|desc][,……n])
  [include (column_name[,……n])]
     [with(<relational_index_option>[,……n])]
 [onfilegroup_name] 

 

                        说明:1,include (column_name[,……n])指定要添加到非聚集索引的叶级别的非键列。

                                     2,on filegroup_name,为指定文件组创建指定索引。

                   例如:在course表中,对“课程代号”列创建聚集索引zindex.

                                         

use db_student
 create clustered index zindex on course(课程代号)


        2,查看索引:(1),使用SQL ServerManagement Studio查看索引信息

                       (2),使用系统存储过程查询索引信息,用SP_helpindex可以返回表中的所有索引信息

                       例如:查看course表的索引信息

                                    

use db_student
   execsp_helpindex course


        3,修改索引:

                    (1),在SQL Server Management Studio 中修改索引

                    (2),使用Alter Index语句修改索引

                        在这里为大家举一个例子:

                       在course数据表中,修改所有的索引,并指定选项

                      

use db_student
    alterindex all on course rebuild with (fillfactor=80,sort_in_tempdb=on,statistics_norecompute=on)


        4,删除索引:

                      (1),使用SQL Server Management  Studio 删除索引

                       (2),使用Drop index语句删除索引

                             例如:在course表中,删除zindex索引

                                       

use db_student
 drop index course.zindex


 

三,索引的分析和维护:

 

         分析:1,使用showplan 语句

                              语法:set showplan_all{on|off},set showplan_next{on|off}

                         例子:显示表course的课程代号,课程类型,课程内容,并显示查询过程

                                                

use db_student
 set showplan_all on  select 课程代号,课程类型 课程内容 from course where 课程内容='loving'


                         2,使用statistics io语句

                          语法:statistics io{on|off}   on和off分别为显示和不显示,使用方法和上一样。

         维护: 1,使用dbcc showcontig语句,显示指定表的数据和索引的碎片信息。当对表中进行大量修改或添加数据后,应该执行此语句查看有无碎片。

                      语法:dbcc  showcontig[{table_name|table_id|view_name|view_id},index_name|index_id] with fast

                       2,使用dbcc dbreindex语句,意思是重建数据库中表的一个或多个索引。

                   语法:

dbcc dbreindex
 (['database.owner.table_name'[,index_name[,fillfactor]]])  [withno_infomsgs]

                   说明: database.owner.table_name,重新建立索引的表名              

                             index_name,是要重建的索引名

                                   fillfactor,要创建索引时每个索引页上要用于存储数据的空间百分比。  

                                  with no_infomsgs,禁止显示所有信息性消息     

   

                     3,使用dbcc indexdefrag,整理指定的表或视图的聚集索引和辅助索引碎片。

                          语法:

dbcc  indexdefrag
   ({database_name|database_id|0},{table_name|table_id|'view_name'|view_id},{index_name|index_id}) 
  with no_infomsgs                  


              总结,只有我们对索引有了充分了熟悉;我们掌握了索引的增删改查四项基本操作,学会利用SQL Server Manager  Sdudio去实现这些功能,和学会利用T-SQL语句去实现(自我感觉利用SQL Server Manager Sdudio 简单一些);当然还要懂得学会分析和维护索引,这样才会更好的让它为咱们服务! 

作者:liujiahan629629 发表于2012-7-30 23:47:28 原文链接
阅读:0 评论:0 查看评论

相关 [sql server 索引] 推荐:

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..

SQL Server 面试

- - SQL - 编程语言 - ITeye博客
在SQL语言中,一个SELECT…FROM…WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为子查询. 子查询分为嵌套子查询和相关子查询两种. 嵌套子查询的求解方法是由里向外处理,即每个子查询在其上一级查询处理之前求解,子查询的结果作为其父查询的查询条件. 子查询只执行一次,且可以单独执行;.

SQL Server 查询性能优化——堆表、碎片与索引(一)

- - 博客园_首页
      SQL Server在堆表中查询数据时,是不知道到底有多少数据行符合你所指定的查找条件,它将根据指定的查询条件把数据表的全部数据都查找一遍. 如果有可采用的索引,SQL Server只需要在索引层级查找每个索引分页的数据,再抓出所需要的少量数据分页即可. 访问数据表内数以万计的数据分页与只访问少数索引的分页两者间的差异,让索引变成效能调校的最佳工具.

SQL Server 查询性能优化——创建索引原则(一)

- - 博客园_首页
索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以. 但是索引对于提高查询性能也不是万能的,也不是建立越多的索引就越好. 索引建少了,用WHERE子句找数据效率低,不利于查找数据. 索引建多了,不利于新增、修改和删除等操作,因为做这些操作时,SQL SERVER除了要更新数据表本身,还要连带地立即更新所有的相关索引,而且过多的索引也会浪费硬盘空间.

从性能的角度谈SQL Server聚集索引键的选择

- - CSDN博客数据库推荐文章
    在SQL Server中,数据是按页进行存放的. 而为表加上聚集索引后,SQL Server对于数据的查找就是按照聚集索引的列作为关键字进行了. 因此对于聚集索引的选择对性能的影响就变得十分重要了. 本文从旨在从性能的角度来谈聚集索引的选择,但这仅仅是从性能方面考虑. 对于有特殊业务要求的表,则需要按实际情况进行选择.

SQL Server优化50法

- - CSDN博客推荐文章
虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决.   查询速度慢的原因很多,常见如下几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷).   I/O吞吐量小,形成了瓶颈效应.   没有创建计算列导致查询不优化.   内存不足网络速度慢查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).

SQL Server 中的事务

- - CSDN博客推荐文章
       事务要有非常明确的开始和结束点,SQL Server 中的每一条数据操作语句,例如SELECT、INSERT、UPDATE和DELETE都是隐式事务的一部分. 即使只有一条语句,系统也会把这条语句当做一个事务,要么执行所有的语句,要么什么都不执行.         事务开始之后,事务所有的操作都会写到事务日志中,写到日志中的事务,一般有两种:一是针对数据的操作,例如插入、修改和删除,这些操作的对象是大量的数据;另一种是针对任务的操作,例如创建索引.

SQL Server优化50法

- - CSDN博客数据库推荐文章
  虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决.   查询速度慢的原因很多,常见如下几种:. 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小,形成了瓶颈效应. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).

SQL Server 查询步骤 - pursuer.chen

- - 博客园_首页
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/查询步骤.       查询步骤是很基础也挺重要的一部分,但是我还是在周围发现有些人虽然会语法,但是对于其中的步骤不是很清楚,这里就来分解一下其中的步骤,在技术内幕系列里面都会有讲到.  TOP于ORDER BY的关系. INSERT INTO Customers VALUES(1,'深圳'),(2,'广州'),(3,'武汉'),(4,'上海'),(5,'北京').

sql server复灾 你懂了吗?

- brett80 - 博客园-首页原创精华区
很多时候我们不小心错误delete了一下,或者update一下怎么办,或者直接把数据库删除了,怎么办呢,是不是就一定没有办法呢. 下面让我来教大家我现学现卖的两招. 做之前我们要设置数据库恢复模式:. 首先我们创建一个表:插入几条数据. 我们现在有五条数据了,我们对数据做一个备份. 做任何差异备份,和日志之前,一定要做一个完整备份.