Java常见面试题—数据库索引详解_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java常见面试题—数据库索引详解

Java常见面试题—数据库索引详解

更新时间:2019-10-12 10:26:52 来源:极悦 浏览5254次

索引在mysql中也叫做键(key),是存储引擎用于快速找到记录的一种数据结构。

索引的作用:加速查询操作;副作用:降低写操作性能;

索引常见的两种数据结构类型:

1.B-Tree索引:它就是传统意义上的索引,它是最常用、最有效的索引。

2.哈希索引:哈希索引是一种自适应的索引,数据库会根据表的使用情况自动生成哈希索引,我们人为是没办法干预的。

B-Tree索引

大多数mysql引擎都支持这种索引;

  • B-Tree通常意味着所有的值都是按顺序存储的,
  • 并且每一个叶子页到根的距离相同;

image.png

B-Tree(M=4)

image.png

B-Tree(M=4,依次插入1~6)

存储引擎不需要进行全表扫描来获取需要的数据,取而代之是从索引的根节点开始进行搜索;

适用于:

  • 全键值查找(全值匹配)
  • 键值范围(若是有多列的合并索引,需要精确匹配某一列并范围匹配另一列)
  • 键前缀查找
  • 按顺序查找(orderby)

限制:

  • 如果不是按照索引的最左列开始查找,则无法使用索引
  • 不能跳过索引中的列
  • 如果查询中有某个列的范围查询,其右边的所有列都无法使用索引优化查询

哈希索引

在mysql中,只有memory引擎显式支持哈希索引;基于哈希表实现,只有精确匹配索引所有列的查询才有效;对于每一行数据,存储引擎会对所有的索引列计算一个哈希码,不同的键值行计算出的哈希码不一样,哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针;(hash索引结构:hash值:指针)

优势:查找速度非常快

限制:

  • 无法用于排序
  • 不支持部分索引列匹配查找
  • 只支持等值比较查询

索引优点:

  • 降低需要扫描的数据量,根据索引定位资源,减少IO次数;
  • 可以帮助避免排序操作,因为索引本身就是根据顺序存放的,避免使用临时表;
  • 帮助将随机IO转为顺序IO,提示系统性能;

索引的缺点

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

哪些情况需要加索引?

  • 在经常需要搜索的列上,可以加快搜索的速度;
  • 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
  • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
  • 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

以上就是极悦java培训机构小编分享的“Java常见面试题—数据库索引详解”的内容,希望对大家有帮助,更多java面试题请继续关注极悦java培训机构官网,每天会精彩内容分享与你。

相关java面试题推荐

2019最新最全java面试题及答案:

Java常见面试题汇总:

2019最新java面试题含答案(基础篇):

各大互联网公司Java面试题汇总:

2019最新Java常见面试题(附带答案):

常被问到的Java面试题(带全部答案):

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>