java中的索引底层怎么实现,如何优化它?

BSO 2020-09-08 09:49:31 java常见问答 9036

众所周知,java的知识点是极其丰富的,想要掌握它们往往需要我们花费大量的时间沉浸其中。今天就来为大家介绍一下java中索引的底层是如何实现的,以及怎么优化索引。

在实现底层索引之前,我们要先了解一下索引的概念。索引是帮助数据库高效获取数据的数据结构。索引的实现通常使用B树及其变种B+树。但是为表设置的索引也有一些问题,首先是增加了数据库的存储空间,另外就是在插入和修改数据需要花费比较长的时间。

接下来我们再看看底层是如何实现的?首先,B-Tree通常用于索引的数据结构。因为它们时间复杂度低,查找、删除、插入操作都可以在对数时间内完成。另外一个重要原因是存储在B-Tree中的数据是有序的。

哈希表是另外一种用作索引的数据结构,这些索引通常被称为哈希索引。使用哈希索引的原因主要是在寻找值时哈希表效率极高。所以,如果使用哈希索引,对比字符串是否相等的查询能够极快检索出值。

至于为什么不用hashmap,原因很简单。哈希表是无顺序的数据结构,对于很多类型的查询语句哈希索引都无法完成。

那么我们应该怎么优化索引呢?主要有以下五个方法。

1.最左前缀匹配原则;

2.对where,on,group by,order by中出现的列使用索引;

3.尽可能地选择区分度高的列作为索引;

4.对较小的数据列使用索引,这样会使索引文件更小;

5.对于like查询,”%”不要放在前面。代码如下所示:

SELECT * FROMhoudunwangWHEREunameLIKE '后盾%'--走索引
SELECT * FROMhoudunwangWHEREunameLIKE "%后盾%"--不走索引

另外有一些不使用索引的情况也需要注意:

1.查询中很少使用到的列不能创建索引,如果建立了索引会降低mysql的性能并且会增大空间需求;

2.数据少的列也不能建立索引;

3.定义为text和image和bit数据类型的列不应该增加索引;

4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系。

以上就是关于java中的索引底层的实现方法以及优化索引的一些操作方式。想要了解更多java基础以及常见问题,敬请关注奇Q工具网。

推荐阅读:

java中索引的分类,图片详解

b树索引适合什么样的查询?什么是b树

b树索引和哈希索引的区别是?