倒排索引与数据库索引

简介: 倒排索引与数据库索引

数据库索引


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


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


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


主键索引的存储结构如下


image.png

图:主键索引存储结构


非主键索引


非主键索引存储结构


image.png


非主键索引的叶子节点只存储索引字段及主键,如果需要索引字段之外的信息,则需要根据主键再回表查询。


比如我们按照银行卡号查询用户名、兴趣爱好等字段,则会根据索引过滤后再回表查询完整信息,被称为是索引下推。


倒排索引


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


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


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


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


Number text Documents[(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)


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


相关文章
|
2月前
|
监控 NoSQL MongoDB
MongoDB数据库的索引管理技巧
【8月更文挑战第20天】MongoDB数据库的索引管理技巧
57 1
|
2月前
|
数据库 索引
如何优化数据库索引?
【8月更文挑战第14天】如何优化数据库索引?
56 4
|
2月前
|
存储 安全 数据库
数据库的索引都有哪些类型?如何选择?
【8月更文挑战第17天】数据库的索引都有哪些类型?如何选择?
90 0
|
7天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
38 3
Mysql(4)—数据库索引
|
9天前
|
关系型数据库 MySQL 数据库
深入浅出MySQL索引优化:提升数据库性能的关键
在这个数据驱动的时代,数据库性能的优劣直接关系到应用的响应速度和用户体验。MySQL作为广泛使用的数据库之一,其索引优化是提升查询性能的关键。本文将带你一探MySQL索引的内部机制,分析索引的类型及其适用场景,并通过实际案例演示如何诊断和优化索引,以实现数据库性能的飞跃。
|
13天前
|
存储 SQL 数据库
深入理解数据库索引:提升查询性能的关键
数据库索引是优化查询性能的重要工具。本文将带你深入探索索引的内部结构和工作原理,揭示如何通过合理使用索引来加速数据库查询,同时避免常见的索引陷阱。
|
27天前
|
监控 关系型数据库 MySQL
如何优化MySQL数据库的索引以提升性能?
如何优化MySQL数据库的索引以提升性能?
70 0
|
27天前
|
监控 关系型数据库 MySQL
深入理解MySQL数据库索引优化
深入理解MySQL数据库索引优化
34 0
|
2月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
75 5
|
2月前
|
数据库 索引
数据库索引的作用和优点缺点
【8月更文挑战第27天】创建索引能显著提升系统性能,确保数据唯一性,加快检索速度,加速表间连接及优化分组排序过程。然而,过度使用索引会导致创建与维护成本增加、占用更多物理空间并降低数据维护效率。因此,在创建索引时需谨慎评估需求及影响。
45 2