一、索引的概念                
    索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

二、索引的特点
    1.索引可以加快数据库的检索速度
    2.索引降低了数据库插入、修改、删除等维护任务的速度
    3.索引创建在表上,不能创建在视图上
    4.索引既可以直接创建,也可以间接创建
    5.可以在优化隐藏中,使用索引
    6.使用查询处理器执行SQL语句,在一个表上,一次只能使用一个索引
    7.其他

三、索引的优点
    1.创建唯一性索引,保证数据库表中每一行数据的唯一性
    2.大大加快数据的检索速度,这也是创建索引的最主要的原因
    3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

四、索引的缺点
    1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
    2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大
    3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

五、索引分类
    1.直接创建索引和间接创建索引
    直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)
    间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引
    2.普通索引和唯一性索引
    普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)
    唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用
    CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
    3.单个索引和复合索引
    单个索引:即非复合索引
    复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段
    CREATE INDEX name_index ON username(firstname,lastname)
    4.聚簇索引和非聚簇索引(聚集索引,群集索引)
   聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列
    CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH
    ALLOW_DUP_ROW(允许有重复记录的聚簇索引)
   非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

六、索引的使用
   1.当字段数据更新频率较低,查询使用频率较高并且存在大量重复值是建议使用聚簇索引
    2.经常同时存取多列,且每列都含有重复值可考虑建立组合索引
      3.复合索引的前导列一定好控制好,否则无法起到索引的效果。如果查询时前导列不在查询条件中则该复合索引不会被使用。前导列一定是使用最频繁的列
    4.多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案
    5.where子句中对列的任何操作结果都是在sql运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被sql优化器优化,使用索引,避免表搜索(例:select * from record where substring(card_no,1,4)=’5378’
&& select * from record where card_no like ’5378%’)任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边
    6.where条件中的’in’在逻辑上相当于’or’,所以语法分析器会将in ('0','1')转化为column='0' or column='1'来执行。我们期望它会根据每个or子句分别查找,再将结果相加,这样可以利用column上的索引;但实际上它却采用了"or策略 ",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,最后从这个临时表中计算结果。因此,实际过程没有利用 column上索引,并且完成时间还要受tempdb数据库性能的影响。in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引
    7.要善于使用存储过程,它使sql变得更加灵活和高效

转载于:https://www.cnblogs.com/niuyy/archive/2007/08/24/868813.html

数据库索引应用(ms-sql)相关推荐

  1. ms sql 索引(一)

    索引的用途 索引的主要作用就是为加快检索的速度(效率).主要是为查询.这里的查询包括表自身的查询,还包括连接查询.此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化 ...

  2. oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍

    SQL Server和Oracle数据库索引介绍 SQL Server 和 Oracle 数据库索引介绍1 SQL Server 中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行 ...

  3. PHP(2):PHP读取MS Sql Server 2014数据库数据

    前面使用VBS将Excel数据写入到了Ms Sql Server 2014的数据库,现在要将记录显示出来,本来打算用IIS+ASP.net,可是9月份安装好Apache+PHP后一直没有写过PHP代码 ...

  4. MS SQL Server 数据库分离-SQL语句

    前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...

  5. 数据库索引的原理到底是什么?

    引言 中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理.网管对前台的管理和维护工作包括保障网络链路通畅.处理MIS终端的突发事件以及对操作员的管理.培训等,这是 ...

  6. springboot + vue + nginx+ MS SQL Server项目部署方法

    一.nginx 1.1 安装 自行搜索nginx进入官网nginx: download选择相应的版本即可. 直接解压到自定义目录: 双击运行nginx.exe,出现终端一闪而过,浏览器输入localh ...

  7. 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

  8. MS SQL巡检系列mdash;mdash;检查重复索引

    原文:MS SQL巡检系列--检查重复索引 前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡 ...

  9. 记录MS SQL Server数据库

    目录 介绍 如何使用文档工具记录SQL Server数据库 使用dbForge Documenter for SQL Server 记录数据库 结论 介绍 所有公司都会积累各种数据,而这些数据最终不可 ...

  10. mysql外键约束脚本_使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)...

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

最新文章

  1. Java编写胖老鼠的交易_猫和胖老鼠
  2. iOS面试准备之思维导图
  3. 华为nova7se能云闪付吗_如何看待11月5日发布的华为nova8 se,性价比怎样?
  4. 人类认知对设计规律有这些影响
  5. openssl 自建CA签发证书 网站https的ssl通信
  6. 个人博客代码_这四个博客模板美观大气,做个漂亮的个人博客必须得收藏
  7. OpenCV calcOpticalFlowPyrLK用法的实例(附完整代码)
  8. C# WebBrowser触发onchange事件
  9. java生产者实现kafka拦截器
  10. pythontk多线程_把python程序变成多线程
  11. asp:boundfield 鼠标悬停后显示_设计了100张图表后,我学到了哪些经验?
  12. apktool反编译生成java_apktool反编译工具下载|apktool反编译工具 v3.0.1 最新版-520下载站...
  13. linux 16.04系统下载,Ubuntu下载16.04_Ubuntu Desktop32位标准版 - 系统之家
  14. python定时任务_Python 定时任务的实现方式
  15. 情感理论-emotion theory
  16. 数字图像处理_07.2_(顶帽变换,击中击不中原理)
  17. 实验四 C程序的编译和调试(Linux基础教程 第2版)
  18. 用8266学习单片机-9-红外报警器-基于光敏电阻的模拟信号读取
  19. Linux版本的mcnp6,Initial MCNP6 release overview. MCNP6 version 0.1
  20. php phantomj,射手网复活攻略:用百度快照和phantomjs让射手网起死回生

热门文章

  1. 语言木头折断放置问题_沃尔玛验厂不能接受的问题点有哪些
  2. oracle 级联外键约束,Oracle 外键的相关约束中级联删除的方案
  3. 正则式转化nfa 代码_从0到1打造正则表达式执行引擎(二)
  4. 数据库学习----MySQL(二)
  5. Unity实现动态资源加载的5种方式
  6. html之常用input type
  7. linux shell 命令批量杀死进程
  8. html5豌豆上的公主,豌豆上的公主阅读练习及答案
  9. windows查询java的进程号命令_将Java服务/命令注册为Windows服务
  10. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_18、SpringBoot测试进阶高级篇之MockMvc讲解...