什么DS适合做数据库的索引

2024-06-12 09:36
文章标签 数据库 索引 适合 ds

本文主要是介绍什么DS适合做数据库的索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、线性表?

二、搜索二叉树?

三、哈希表?

四、B树?

五、B+树?(答案是这个)


数据库索引具有很强大的功能,他可以在海量的数据中查找特定的值,或者某一个范围的数据集合,而且非常稳定。

那么什么数据结构支持它能高效的查询呢?

一、线性表?

首先最简单的各种线性表就不可能了,时间复杂度是O(N)。

二、搜索二叉树?

实际上二叉搜索树的时间复杂度也是O(N),如果数据是升序或者降序,将会是一个倾斜二叉树,显然不能提供良好的稳定性。

如果遇到差的情况,需要多次硬盘IO。

但是总所周知,数据库很娇贵,硬盘IO速度很低,我们要经可能减少硬盘的IO

三、哈希表?

哈希表的确很快,搜索效率达到了常数级,而且稳定;

但是也不行。

我们都知道,哈希表的底层是用要查询的数据使用对应哈希函数,散列到哈希表对应位置的,这就是为什么哈希表的查询是O(1)的原因,但是这也有一个致命的弊端。

》》》就是它不能查询某一个范围的数据集合

因为通过哈希函数得到的下标,与临近的数据之间并没有实质上的联系

四、B树?

B树就是平衡的二叉搜索树,但是他的每一个节点不在是单个数据,而是一组排好序的数据集合:

这样树的高度得到减少,而且每次IO可以获得多组数据,搜索效率得到了极大提升。

但是,它也不适合作为索引的数据结构。

原因很简单,它不够稳定,有时候如果查询到树顶端的数据,就会很快,有时候要查询的是叶子结点的数据相对来讲就会慢很多。

稳定性是难能可贵的有点,这样程序的运行效率才是可以预测的,才是可靠的。

五、B+树?(答案是这个)

B+树是B树的改良版本。

B+树中,只在叶子节点存储实际的数据其他节点只存储主键(也就是一个数字)

这样,虽然牺牲了一少部分性能,但是可以使数据结构变得稳定,每一次数据查询,都需要走到叶子结点。

想要实现范围查询也很简单,把叶子节点通过指针串联成一个链表形式的数据结构即可。

这样就得到了一个查询快速,性能稳定,可以范围查询,还节约了部分空间的数据结构了。

这篇关于什么DS适合做数据库的索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053846

相关文章

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA