当前位置: 首页 > news >正文

倒排索引与数据库索引

数据库索引

mysql索引以B+树作为存储结构,B+树的主要特点是,非叶子节点不存储数据,数据只存储在叶子节点上,并且所有叶子节点组成有序链表

主键索引(聚簇索引)

假设我们的表结构如下

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(20) DEFAULT NULL COMMENT '名称',`bank_no` varchar(20) DEFAULT NULL COMMENT '银行卡号',`hobby` varchar(20) DEFAULT NULL COMMENT '兴趣爱好',PRIMARY KEY (`id`),UNIQUE KEY `user_bank_no` (`bank_no`,`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

数据库主键索引对应的文档存储的表内容可表示为:

DocumentIdnamebank_nohobby
1鲁智深6201篮球、唱歌
200吴用5100篮球、旅游
3000花荣1234台球、旅游
5000柴进2245唱歌、游泳
5001武松5678篮球、游泳
5200杨志1345游泳、台球
8000宋江9987唱歌
10000卢俊义3347足球、旅游

主键索引的存储结构如下


图:主键索引存储结构
非主键索引

非主键索引存储结构



非主键索引的叶子节点只存储索引字段及主键,如果需要索引字段之外的信息,则需要根据主键再回表查询。
比如我们按照银行卡号查询用户名、兴趣爱好等字段,则会根据索引过滤后再回表查询完整信息,被称为是索引下推。

倒排索引

数据库索引是一种正排索引,上面的例子中,如果查询兴趣爱好为“游泳”的用户信息,则会触发全表扫描。这种情况下创建全文索引可很大程度的提高查询效率,而全文索引(full inverted index )就一种倒排索引(inverted file index )的实现。

如果是倒排索引,则文档存储的表内容可表示为:

NumbertextDocuments
1篮球1,200,5001
2唱歌1, 5000, 8000
3旅游200, 3000, 10000
4台球3000, 5200
5游泳5000, 5200
6足球10000

全文索引不仅可以存储文档的ID,还可以存储单词在text的位置信息(position)

NumbertextDocuments[(DocumentId: position)]
1篮球(1: 1),(200: 1), (5001: 1)
2唱歌(1: 2), (5000: 1), (8000: 1)
3旅游(200: 2), (3000: 2), (10000: 2)
4台球(3000: 1), (5200: 2)
5游泳(5000: 2), (5200: 1)
6足球(10000: 1)

最后,倒排索引作为一种索引结构,可以更好的定位数据,并能扩充一些搜索特性,但是也会占用更多的磁盘空间。



喜欢的朋友记得点赞、收藏、关注哦!!!

http://www.dtcms.com/a/168879.html

相关文章:

  • 小刚说C语言刷题—1018三角形类别
  • [预备知识]5. 优化理论(一)
  • Linux 库文件详解
  • 文章六:《循环神经网络(RNN)与自然语言处理》
  • 云盘系统设计
  • EMC PowerStore存储学习之一NVMe磁盘的命名规则
  • 预订接口优化:使用本地消息表保证订单生成、库存扣减的一致性
  • 程序员转行酒店用品客户经理
  • MySQL 中的游标(Cursor)
  • [计算机科学#8]:指令与程序的奥秘
  • c语言的常用关键字
  • WebRtc11:SDP详解
  • AE/PR模板 100个现代文字标题动态排版效果动画 Motion Titles
  • C++ unordered_set unordered_map
  • LearningFlow:大语言模型城市驾驶的自动化策略学习工作流程
  • 2023华为od统一考试B卷【二叉树中序遍历】
  • 5.2算法学习笔记(动态规划)
  • 文章七《深度学习调优与超参数优化》
  • 【东枫科技】AMD / Xilinx Alveo™ V80计算加速器卡
  • pip 常用命令及配置
  • SQL语句练习 自学SQL网 在查询中使用表达式 统计
  • 紫荆阁电玩平台环境搭建与系统运行实录(蒙特卡洛系列)
  • 从实列中学习linux shell9 如何确认 服务器反应迟钝是因为cpu还是 硬盘io 到底是那个程序引起的。cpu负载多高算高
  • python如何在深度学习框架目标检测算法使用Yolov8训练道路汽车漆面车漆缺陷数据集 建立基于YOLOv8道路汽车漆面缺陷(划痕)检测系统
  • Linux中的权限
  • spring-ai集成langfuse
  • 【愚公系列】《Manus极简入门》013-电影推荐专家:“银幕导航家”
  • MQTT 协议与 HTTP 协议的区别
  • 西电雨课堂《知识产权法》课后作业答案
  • C语音中的三元运算符