倒排索引与数据库索引

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

数据库索引


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)


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


相关文章
|
1月前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
53 3
|
1月前
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
77 3
|
18天前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
B+树优化了数据存储和查询效率,数据仅存于叶子节点,便于区间查询和遍历,磁盘读写成本低,查询效率稳定,特别适合数据库索引及范围查询。
34 6
|
29天前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因
B+树相较于B树,在数据存储、磁盘读写、查询效率及范围查询方面更具优势。数据仅存于叶子节点,便于高效遍历和区间查询;内部节点不含数据,提高缓存命中率;查询路径固定,效率稳定;特别适合数据库索引使用。
29 1
|
1月前
|
数据库 索引
数据库索引
数据库索引 1、索引:建立在表一列或多列的辅助对象,目的是加快访问表的数据。 2、索引的优点: (1)、创建唯一性索引,可以确保数据的唯一性; (2)、大大加快数据检索速度; (3)、加速表与表之间的连接; (4)、在查询过程中,使用优化隐藏器,提高系统性能。 3、索引的缺点: (1)、创建和维护索引需要耗费时间,随数据量增加而增加; (2)、索引占用物理空间; (3)、对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。
33 2
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
72 3
Mysql(4)—数据库索引
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
256 1
|
1月前
|
存储 关系型数据库 数据库
Postgres数据库BRIN索引介绍
BRIN索引是PostgreSQL提供的一种高效、轻量级的索引类型,特别适用于大规模、顺序数据的范围查询。通过存储数据块的摘要信息,BRIN索引在降低存储和维护成本的同时,提供了良好的查询性能。然而,其适用场景有限,不适合随机数据分布或频繁更新的场景。在选择索引类型时,需根据数据特性和查询需求进行权衡。希望本文对你理解和使用PostgreSQL的BRIN索引有所帮助。
48 0
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
110 0
|
2月前
|
关系型数据库 MySQL 数据库
深入浅出MySQL索引优化:提升数据库性能的关键
在这个数据驱动的时代,数据库性能的优劣直接关系到应用的响应速度和用户体验。MySQL作为广泛使用的数据库之一,其索引优化是提升查询性能的关键。本文将带你一探MySQL索引的内部机制,分析索引的类型及其适用场景,并通过实际案例演示如何诊断和优化索引,以实现数据库性能的飞跃。