索引的使用说明

题外话:
     昨天比较郁闷,维护一客户的数据库系统时候,发现系统处理数据就出现假死。
开始因为是软件问题,拷得乱忙一下午还没有拷定,后来一直弄到晚上7点,突然想起索引问题。
后来就使用了一命令:

dbcc dbreindex('TableName','',80)

即可实现。比较郁闷和晕,自己犯这样的错误。
     这错误,正好是我想写这帖的原因,希望能为大家解决一些实际问题吧。

正题:
为什么要建立合适的索引,重要的目的就是提高查询效率。
这里简单说一下索引的两种类型:

帮助的说明

聚集
聚集索引基于数据行的键值在表内排序和存储这些数据行。由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。数据行本身构成聚集索引的最低级别。
只有当表包含聚集索引时,表内的数据行才按排序次序存储。如果表没有聚集索引,则其数据行按堆集方式存储。
非聚集
非聚集索引具有完全独立于数据行的结构。非聚集索引的最低行包含非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。数据行不按基于非聚集键的次序存储。
在非聚集索引内,从索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页的存储方式是堆集还是聚集。对于堆集,行定位器是指向行的指针。对于有聚集索引的表,行定位器是聚集索引键。

来的例子说明最能体现建立索引的好处。

 
--测试表DTest (无索引)
SELECT IDENTITY(int,1,1) AS [id],B.[id] AS TKey,B.[Name] AS [TName] INTO DTest 
FROM Master..syscolumns AS A ,Master..sysobjects AS B
--测试表TTest (建立索引)
SELECT IDENTITY(int,1,1) AS [id],B.[id] AS TKey,B.[Name] AS [TName] INTO TTest 
FROM Master..syscolumns AS A ,Master..sysobjects AS B

在我的测试中,DTest,TTest表有500多万条记录,可以满足测试要求。

操作如图:
1、设置表TTest的字段ID为主键。
 

2、对表TTest中的列TName建立一个非聚集索引。

3、测试查询语句的效率。
在查询分析器中输入:

SELECT * FROM  DTest WHERE TName='sp_ActiveDirectory_Obj'

按键盘Ctrl+L,显示预计的执行计划,可以查看执行效率。

预计的成本是31.8.

再在查询分析器中输入:

SELECT * FROM  TTest WHERE TName='sp_ActiveDirectory_Obj'

按键盘Ctrl+L,显示预计的执行计划,可以查看执行效率。

预计的成本是28.5 .
从这图可以看出,使用索引后,查询效率差不多提高了10的百分点。

下面我们再看实际查询的结果用时:
没有索引时候,用时:26秒。

对列Tname加索引,用时:0秒。

呵呵,明显看出效率的提高。

这里写几点注意:
1、将更新尽可能多的行的查询写入单个语句内,而不要使用多个查询更新相同的行。仅使用一个语句,就可以利用优化的索引维护。
2、对聚集索引使用整型键。另外,在唯一列、非空列或 IDENTITY 列上创建聚集索引可以获得性能收益
3、在查询经常用到的所有列上创建非聚集索引。这可以最大程度地利用隐蔽查询
4、重建索引可以重新组织索引数据(对于聚集索引还包括表数据)的存储,清除碎片。如我开始提到的使用

dbcc dbreindex('TableName','',80)

来重构索引。

在实际的应用中,会发现很多问题,得具体问题具体分析,这里只是简单一个例子说明使用索引的好处。

转载于:https://www.cnblogs.com/kingjiong/archive/2010/03/07/1680423.html

SQL Server 索引使用和优化相关推荐

  1. 探索SSMS中SQL Server索引属性

    This article gives you an insight into SQL Server Index properties in SSMS. 本文使您可以深入了解SSMS中SQL Serve ...

  2. 市场活动课件:SQL Server 索引优化

    2014年1月12日,微软合作伙伴售前工程师俱乐部在珠海市联通大厦12楼会议室举办. 议题: 一. 侯钟雷:Sharepoint 2013无代码开发 二. 唐得琳:Excel 2013 新功能展示 三 ...

  3. 索引sql server_优化SQL Server索引策略

    索引sql server 指数策略概述 (Index strategies overview) This article is about techniques for optimizing the ...

  4. SQL SERVER 索引优化——移除键查找(书签查找)或RID查找

    SQL SERVER 索引优化--移除键查找(书签查找)或RID查找 原创三空道人 最后发布于2018-12-21 16:45:27 阅读数 971  收藏 展开 SQL SERVER 索引优化 -- ...

  5. Sql server索引优化

    Sql server索引优化 索引优化(1)堆上的非聚集索引 一.索引概述 1.概念 可以把索引理解为一种特殊的目录.就好比<新华字典>为了加快查找的速度,提供了几套目录,分别按拼音.偏旁 ...

  6. SQL Server 索引结构及其使用(二)(转)

    SQL Server 索引结构及其使用(二) 作者:freedk 一.深入浅出理解索引结构 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被 ...

  7. SQL Server索引设计 第五篇

    SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列: 使用窄索引: 检查列的选择性: 检查列的数据类型: 考虑列顺序: 考虑索引类型(聚集索引OR非聚集索引): 一.检查 ...

  8. 详细讲解SQL Server索引的性能问题

    在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引.因为查询执行 ...

  9. SQL Server 数据库的整理优化的基本过程(二)

    SQL Server 数据库的整理优化的基本过程(二) 高建刚 第一节 基本维护 第二节 索引 索引相信大家都不陌生,而且在因特网上,有了很多关于如何通过索引来优化数据库的文章,在这里,我主要是结合我 ...

最新文章

  1. openvn客户端连接配置(ubnutu)
  2. Topcoder SRM 697题解
  3. firework常用快捷键
  4. Mysql 主从数据库同步详解
  5. java jdk win10安装_Java 安装 JDK WIN10
  6. 698. Partition to K Equal Sum Subsets
  7. 函数参数传递、数组指针、二级指针、左值、引用
  8. 当网卡收到的包的目的地址是主机上另一个网卡的地址.arp总结
  9. Kubernetes网络策略,这一篇就够了
  10. JS 在线预览Word
  11. 2018年泰迪杯心得总结--最全的数学建模、数据挖掘的比赛入门
  12. QuantLib 开源金融计量学工具箱下载
  13. PDF英文文档免费翻译成中文
  14. 一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
  15. android PorterDuffXfermode ,PorterDuff.Mode 使用 以及Porter-Duff规则详解
  16. 软考中级哪一门比较好过?
  17. 音视频开发--音视频基础
  18. C++实现JPEG格式图片解析(附代码)
  19. python校验用户登录信息
  20. 渗透测试-Docker容器

热门文章

  1. css a标签去掉下划线_CSS入门知识汇总
  2. mysql查询过程从客户端发送查询请求_MySQL查询过程和高级查询
  3. 一个菜鸟从高一到大二的作品整理
  4. 5.慎重选择删除元素的方法
  5. 使用OpenSSL进行RSA加密和解密(非对称)
  6. 【Linux】Makefile文件
  7. c++错误之map的find()返回值类型
  8. command not found: django-admin.py
  9. 8086汇编-实验8-jmp指令的理解
  10. [译] ROS C++ 代码规范