数据库索引应用

 

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

二、索引的特点
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 ‘%78%’)任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边
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/wellsoho/p/3208667.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Github推荐]CVPR2019录用论文下载及可视化论文网站

简介 CVPR 是 IEEE Conference on Computer Vision and Pattern Recognition 的缩写,即 IEEE 国际计算机视觉与模式识别会议。该会议是由 IEEE 举办的计算机视觉和模式识别领域的顶级会议。 它是 IEEE 一年一度的学术性会议,会议的主要内容是计算机视觉…

UNIX网络编程——fcntl函数

fcntl函数提供了与网络编程相关的如下特性:非阻塞式I/O。 通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型。信号驱动式I/O。 通过使用F_SETFL命令设置O_ASYNC文件状态标志,我们可以把一个套接字设置成O…

如何远程访问服务器的 Jupyter notebook

图来自 Unsplash 网站,作者:Christopher Gower2019 年第 52 篇文章,总第 76 篇文章本文大约 4600 字,阅读大约需要 12 分钟写在前面当我们拥有一台服务器的时候,通常服务器都可能包含比本地电脑比较好的配置&#xff0…

[Python技巧]如何加快循环操作和Numpy数组运算速度

2019 年第 53 篇文章,总第 77 篇文章本文大约 4200 字,阅读大约需要 11 分钟前言Python 虽然写起来代码量要远少于如 C,Java,但运行速度又不如它们,因此也有了各种提升 Python 速度的方法技巧,这次要介绍的是用 Numba …

ictclas4j 分词工具包 安装流程

首先把 ictclasj解压缩,然后 1.把 Data文件夹整个拷贝到 Eclipse项目的文件夹下, 2.而 bin目录下的 org文件夹整个拷贝到你 Eclipse项目的 bin目录下,(将class文件存进去) 3.把src目录下的org文件夹整个拷贝到 Eclipse项目 的src目…

[周末阅读]认知和规划,以及推荐几个入门教程Github

图片来自 Unsplash,作者: Rafael Saes 2019 年第 54 篇文章,总第 78 篇文章本文大约 4600 字,阅读大约需要 12 分钟前言本来预计每个周末一篇读后感,但从上次分享[周末阅读]如何培养你的自信和正确认识财富、创造财富&…

Android开发(一):android环境搭建

android开发环境搭建,图文并茂,推荐http://jingyan.baidu.com/article/f0062228f0b18afbd2f0c871.html 【SDK Manager.exe】安装过程遇到问题:【Android SDK Manager下载API时一直显示“Done loading packages”却迟迟不能前进......】 解决地…

Python基础入门_5面向对象基础

Python 基础入门前四篇: Python 基础入门–简介和环境配置Python基础入门_2基础语法和变量类型Python基础入门_3条件语句和迭代循环Python基础入门_4函数 第五篇主要介绍 Python 的面向对象基础知识,也就是类的介绍,包括类方法和属性、构造…

ios 制作framework

原文:http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/ 原文废话太多啊,自己总结一下,因为我是在原有的静态库工程基础上建立的,所以新建一个target就好了。 1 新建target,macOS中的bundle&#xf…

一文了解下 GANs可以做到的事情

原文链接:https://machinelearningmastery.com/impressive-applications-of-generative-adversarial-networks/ 简介 如果说目前深度学习最火,应用最多的领域,莫过于 GAN–Generative Adversarial Network,翻译过来就是生成对抗…

浅析php学习的路线图

一直都想走上码农的道路,奈何当年没有学好。一直与码农无缘。现在又想做一些码农就下了一套某个培训机构的php视频来看。希望能走上码农的道路1.php初级教程 初级教程主要的页面设置的,就是 htmljsdivcss 2.中级教程中级的话开始接触php,就是php核心编程…

被垃圾分类逼疯?试试这款垃圾自动分类器

这是小编转载的第 31 篇好文来自:视说AI作者:视说君让垃圾自动分类近期垃圾分类成为了一个热门话题,原来直接一次性扔掉的垃圾,现在都需要分门别类进行投放。从今年7月1日起,新的《上海市生活垃圾管理条例》正式开始施…