极客时间 《Redis核心技术与实战》01 | 基本架构:一个键值数据库包含什么?知识总结

索引

Redis中的索引数据结构

Redis使用的索引结构是哈希表(Hash Table)。Redis的键值对中的key就是字符串对象,而value就是Redis的数据类型,可以是String、List、Hash、Set、Zset等。Redis底层使用了一个全局哈希表保存所有键值对,哈希表的最大好处是O(1)的时间复杂度快速查找到键值对。哈希表其实就是一个数组,数组中的元素叫做哈希桶。当出现哈希冲突时,Redis会使用链表来解决冲突,将冲突的元素保存到同一个哈希桶中

MySQL

MySQL的索引的数据结构是B+Tree。特点是所有的数据都会出现在叶子节点,叶子节点形成一个单向链表,非叶子节点仅仅起到索引数据作用,具体的数据都是在叶子节点存放的。

在MySQL中,使用InnoDB存储引擎时,非主键索引(也称为二级索引或辅助索引)的B+树结构与主键索引的B+树结构有所不同。对于非主键索引的B+树,其叶子节点存储的是索引键值和对应的行数据的地址(即主键值)。

具体来说,非主键索引的B+树叶子节点包含以下两部分:

  1. 索引键值:这是非主键索引的键值,例如,如果有一个索引是建立在某个字段column_name上,那么这个字段的值就是索引键值。
  2. 主键值:由于InnoDB存储引擎使用聚簇索引(即主键索引),数据行是按照主键顺序存放的。因此,非主键索引的叶子节点除了存储索引键值外,还会存储一个指向对应数据行的逻辑指针,这个指针实际上是数据行的主键值。当通过非主键索引查找数据时,InnoDB存储引擎会先在非主键索引的B+树中找到对应的主键值,然后再用这个主键值去主键索引的B+树中查找具体的数据行。

这种设计使得InnoDB存储引擎在通过非主键索引查找数据时需要两次索引查找:第一次是在非主键索引中找到主键值,第二次是在主键索引中找到具体的数据行。这个过程被称为"索引的二次查找"。

在某些情况下,如果查询只需要使用到索引键值,而不需要实际的数据行,这种查询被称为"索引覆盖扫描",它可以避免二次查找,提高查询效率。

相关推荐
喜欢的名字被抢了16 分钟前
MongoDB生产实践:架构设计、分片集群与运维监控
数据库·mongodb·教程
红糖奶茶27 分钟前
MySQL 8.0的自增主键持久化特性
数据库·mysql·adb
Macbethad1 小时前
基于TwinCAT的半导体刻蚀设备SCADA管理程序技术方案
运维·网络·数据库
亿牛云爬虫专家1 小时前
2026架构前沿:将Declarative Crawler(声明式爬虫)引入你的技术栈
爬虫·架构·爬虫代理·requests·隧道代理·声明式爬虫·转发模式
ai_coder_ai1 小时前
编写自动化脚本,在自己后端服务中使用云原生Baas服务进行设备相关操作
数据库·云原生·自动化
oradh2 小时前
Oracle DG主备架构的基本维护操作总结
数据库·oracle·架构·dg主备架构的基本维护操作总结
东方佑2 小时前
FRSMASH v3.7:当门控机制成为长上下文的枷锁——一个极简修复背后的架构洞见
人工智能·架构
xieliyu.2 小时前
MySQL 六大基础约束详解:NOT NULL/DEFAULT/UNIQUE/ 主键 / 外键 / CHECK
android·数据库·sql·mysql
Niuguangshuo2 小时前
TTS 架构的六代演进(一):三段式链路与评测框架
架构
武子康2 小时前
调查研究-224 Prefill 与 Decode 分离:高并发 LLM Serving 的下一层架构
人工智能·ai·架构·llm·gpu·vllm·sglang