索引技术-程序员宅基地

技术标签: 数据库  

索引技术

索引是对数据库表中一个或多个列的值进行排序的结构。优点:大大加快检索速度;创建唯一性索引,保证数据库表中每一行数据的唯一性;加速表和表之间的连接;在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间——大大减少服务器需要扫描的数据量;帮助服务器避免排序和临时表;将所及I/O变为顺序I/O。但也有缺点:索引需要占用数据表以外的物理存储空间;创建索引和维护索引要花费一定的时间;当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。

索引使用规则:

  1. 不要索引数据量不大的表,对于小表来讲,表扫描的成本并不高。
  2. 不要设置过多的索引,在没有聚集索引的表中,最大可以设置249个非聚集索引,过多的索引首先会带来更大的磁盘空间,而且在数据发生修改时,对索引的维护是特别消耗性能的。
  3. 合理应用复合索引,有某些情况下可以考虑创建包含所有输出列的复合索引。
  4. 对经常使用范围查询的字段,可能考虑聚集索引。
  5. 避免对不常用的列,逻辑性列,大字段列创建索引。

索引类型

  • 普通索引:create index stusno on student(sno)
  • 唯一索引:unique。例如:create unique index stusno on student(sno)表明此索引的每一个索引值只对应唯一的数据记录对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复
  • 主键索引:数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
  • 聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
  • 全文索引(全文检索):具体细节详见https://blog.csdn.net/hycxag/article/details/83384652

索引的实现

  • B+树:是一种平衡树,数据库开发商会设置子节点数的一个最大值,这个值不会太小,所以B+树一般来说比较矮胖,而红黑树就比较瘦高了。如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引本身就对应到两个字段上的,效率会有很大提高。
  • 散列索引:通过散列函数来定位的一种索引,不过很少有单独使用散列索引的,反而是散列文件组织用的比较多。散列文件组织就是根据一个键通过散列计算把对应的记录都放到同一个槽中,这样的话相同的键值对应的记录就一定是放在同一个文件里了,也就减少了文件读取的次数,提高了效率。
  • 位图索引:是一种针对多个字段的简单查询设计的一种特殊的索引,适用范围比较小,只适用于字段值固定并且值的种类很少的情况,比如性别,只能有男和女,或者级别,状态等等,并且只有在同时对多个这样的字段查询时才能体现出位图的优势。位图的基本思想就是对每一个条件都用0或者1来表示,如有5条记录,性别分别是男,女,男,男,女,那么如果使用位图索引就会建立两个位图,对应男的10110和对应女的01001,这样做有什么好处呢,就是如果同时对多个这种类型的字段进行and或or查询时,可以使用按位与和按位或来直接得到结果了。
  • 三种索引的比较:B+树最常用,性能也不差,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以;HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间;位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询,比如性别),否则建立一大堆位图就一点意义都没有。

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hycxag/article/details/83384405

智能推荐

【技术分享】针对SOAP的渗透测试与防护_available soap services 漏洞-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏2次。本文翻译自:https://blog.securelayer7.net/owasp-top-10-penetration-testing-soap-application-mitigation/SOAP概述简单对象访问协议(SOAP)是连接或Web服务或客户端和Web服务之间的接口。SOAP通过应用层协议(如HTTP,SMTP或甚至TCP)进行操作,用于消息传输。图1 SOAP操..._available soap services 漏洞

GB∕T 33171-2016 城市交通运行状况评价规范_城市交通运行状况评价规范 下载-程序员宅基地

文章浏览阅读407次,点赞5次,收藏8次。标准号:GB/T 33171-2016中文标准名称:城市交通运行状况评价规范 英文标准名称:Specification for urban traffic performance evaluation_城市交通运行状况评价规范 下载

ROS1与ROS2的bag包互换(包含自定义消息)_ros2的rosbag可以用ros1播放么-程序员宅基地

文章浏览阅读7.3k次,点赞8次,收藏48次。https://blog.csdn.net/shanpenghui/article/details/117282535https://blog.csdn.net/weixin_37532614/article/details/109602947https://blog.csdn.net/weixin_41010198/article/details/117042386_ros2的rosbag可以用ros1播放么

Python报错:RuntimeError: one of the variables needed for gradient computation has been modified by_python runtimeerror: one of the variables needed f-程序员宅基地

文章浏览阅读978次。Python报错:RuntimeError: one of the variables needed for gradient computation has been modified by_python runtimeerror: one of the variables needed for gradient computation ha

使用协同过滤方法来改善推荐系统的效果(Using collaborative filtering method-程序员宅基地

文章浏览阅读372次。作者:禅与计算机程序设计艺术 1.简介推荐系统是互联网领域的一个重要组成部分。随着互联网用户的增长,网站和应用都需要提供更加个性化的服务,提高用户的黏性。推荐系统帮助用户发现感兴趣的内容、产品或服务,并根据个人喜好进行排序。比如,当用户在电子商务网站上浏览商品时,推荐系统会推荐相关的商品给用户,这些推

递归法:一个实数数列共有N项,已知ai=(ai-1 - ai+1) / 2 + d_已知ai,ai-1,如何求通项公式-程序员宅基地

文章浏览阅读2.5k次。题目描述:一个实数数列共有N项,已知ai = (a_i-1 - a_i+1) / 2 + d, (1 < i < N)(N < 60)键盘输入N,d, a1, an, n, 输出 an。进行简单的代换2ai - 2d = ai-1 - ai+1 ==>ai+1 = ai-1 - 2ai + 2d ==>ai = ai-2 - 2ai-1 + 2d 2 &..._已知ai,ai-1,如何求通项公式

随便推点

打表法-程序员宅基地

文章浏览阅读4.8k次,点赞9次,收藏24次。今天见到了传说中的打表法,有人说这是流氓算法,但是我觉得这个也是非常牛逼的。下面就来说说这个打表法把,打表法对于某些用时较长的题目非常的有用。就是将我们要的结果打印到一个文本文档中,然后直接调用这个结果就可以了。在编译的时候就不用再程序里面计算,这样就省了很多时间,。是不是非常的牛逼呢,哈哈程序如下;#include<iostream>#include<..._打表法

Ribbon实战与原理剖析_ribbon原理-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏11次。通过实现IRule接口可以自定义负载策略,主要的选择服务逻辑在 choose 方法中。}_ribbon原理

Centos 安装GPU并行lammps_centos lammps gpu-程序员宅基地

文章浏览阅读6.1k次,点赞6次,收藏16次。以下描述了如何在Centos服务器上安装GPU版本的lammps。安装环境目标属性系统Linux/CentOS 7.6CPU12*Intel Xeon CPU E5-2609 v3 @ 1.90GHzGPU2*NVIDIA Tesla K80/CUDA 8.0安装准备1. CUDA由于是安装GPU版本lammps,首先应确保系统安装有显卡所对..._centos lammps gpu

小米HR:说说对API有多少的理解? 看了后,和面试官扯皮,吹牛逼!绰绰有余!_能直接温hr是不是刷api的吗-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏32次。目录什么是API?什么是API测试API测试的测试用例:API测试方法:如何进行API测试API测试的最佳做法:API测试检测到的错误类型API测试工具API测试的挑战结论:最后什么是API?API(全称Application Programming Interface)是两个单独的软件系统之间的通信和数据交换。实现API的软件系统包含可以由另一个软件系统执行的功能/子例程。什么是API测试API测试是一种用于验证API(应用程序编程接口)的._能直接温hr是不是刷api的吗

Android开发 入门篇(二) - 常用UI控件_能(textview、edittext、button、progressbar、alertdialog-程序员宅基地

文章浏览阅读915次,点赞2次,收藏7次。date: 2020-01-12 21:46:05文章目录控件ButtonTextViewEditTextImageViewProgressBarAlertDialogProgressDialog布局LenearLayoutandroid:layout_gravityandroid:layout_weightRelativeLayoutFrameLayout百分比布局其他自定义控件ListVie..._能(textview、edittext、button、progressbar、alertdialog、progressdialog、lis

python3.4中文版下载-Python 3.4 入门指南 官方中文版.pdf-程序员宅基地

文章浏览阅读1.2k次。【实例简介】【实例截图】【核心代码】CONTENTS1 开胃菜 22 使用 Python 解释器 42.1 调用 Python 解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 解释器及其环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...._python_3.4_入门指南(官方中文版).pdf

推荐文章

热门文章

相关标签