数据库索引应用(ms-sql)
索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
二、索引的特点
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)相关推荐
- ms sql 索引(一)
索引的用途 索引的主要作用就是为加快检索的速度(效率).主要是为查询.这里的查询包括表自身的查询,还包括连接查询.此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化 ...
- oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍
SQL Server和Oracle数据库索引介绍 SQL Server 和 Oracle 数据库索引介绍1 SQL Server 中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行 ...
- PHP(2):PHP读取MS Sql Server 2014数据库数据
前面使用VBS将Excel数据写入到了Ms Sql Server 2014的数据库,现在要将记录显示出来,本来打算用IIS+ASP.net,可是9月份安装好Apache+PHP后一直没有写过PHP代码 ...
- MS SQL Server 数据库分离-SQL语句
前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...
- 数据库索引的原理到底是什么?
引言 中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理.网管对前台的管理和维护工作包括保障网络链路通畅.处理MIS终端的突发事件以及对操作员的管理.培训等,这是 ...
- springboot + vue + nginx+ MS SQL Server项目部署方法
一.nginx 1.1 安装 自行搜索nginx进入官网nginx: download选择相应的版本即可. 直接解压到自定义目录: 双击运行nginx.exe,出现终端一闪而过,浏览器输入localh ...
- 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)
在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...
- MS SQL巡检系列mdash;mdash;检查重复索引
原文:MS SQL巡检系列--检查重复索引 前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡 ...
- 记录MS SQL Server数据库
目录 介绍 如何使用文档工具记录SQL Server数据库 使用dbForge Documenter for SQL Server 记录数据库 结论 介绍 所有公司都会积累各种数据,而这些数据最终不可 ...
- mysql外键约束脚本_使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)...
在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...
最新文章
- Java编写胖老鼠的交易_猫和胖老鼠
- iOS面试准备之思维导图
- 华为nova7se能云闪付吗_如何看待11月5日发布的华为nova8 se,性价比怎样?
- 人类认知对设计规律有这些影响
- openssl 自建CA签发证书 网站https的ssl通信
- 个人博客代码_这四个博客模板美观大气,做个漂亮的个人博客必须得收藏
- OpenCV calcOpticalFlowPyrLK用法的实例(附完整代码)
- C# WebBrowser触发onchange事件
- java生产者实现kafka拦截器
- pythontk多线程_把python程序变成多线程
- asp:boundfield 鼠标悬停后显示_设计了100张图表后,我学到了哪些经验?
- apktool反编译生成java_apktool反编译工具下载|apktool反编译工具 v3.0.1 最新版-520下载站...
- linux 16.04系统下载,Ubuntu下载16.04_Ubuntu Desktop32位标准版 - 系统之家
- python定时任务_Python 定时任务的实现方式
- 情感理论-emotion theory
- 数字图像处理_07.2_(顶帽变换,击中击不中原理)
- 实验四 C程序的编译和调试(Linux基础教程 第2版)
- 用8266学习单片机-9-红外报警器-基于光敏电阻的模拟信号读取
- Linux版本的mcnp6,Initial MCNP6 release overview. MCNP6 version 0.1
- php phantomj,射手网复活攻略:用百度快照和phantomjs让射手网起死回生
热门文章
- 语言木头折断放置问题_沃尔玛验厂不能接受的问题点有哪些
- oracle 级联外键约束,Oracle 外键的相关约束中级联删除的方案
- 正则式转化nfa 代码_从0到1打造正则表达式执行引擎(二)
- 数据库学习----MySQL(二)
- Unity实现动态资源加载的5种方式
- html之常用input type
- linux shell 命令批量杀死进程
- html5豌豆上的公主,豌豆上的公主阅读练习及答案
- windows查询java的进程号命令_将Java服务/命令注册为Windows服务
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_18、SpringBoot测试进阶高级篇之MockMvc讲解...