`

一些概念:联合索引

 
阅读更多
联合索引

如何联合索引查询?
所以给定查询过滤条件 age=18 的过程就是先从 term index 找到 18 在 term dictionary 的大概位置,然后再从 term dictionary 里精确地找到 18 这个 term,然后得到一个 posting list 或者一个指向 posting list 位置的指针。然后再查询 gender= 女 的过程也是类似的。最后得出 age=18 AND gender= 女 就是把两个 posting list 做一个“与”的合并。


这个理论上的“与”合并的操作可不容易。对于 mysql 来说,如果你给 age 和 gender 两个字段都建立了索引,查询的时候只会选择其中最 selective 的来用,然后另外一个条件是在遍历行的过程中在内存中计算之后过滤掉。那么要如何才能联合使用两个索引呢?有两种办法:
* 使用 skip list 数据结构。同时遍历 gender 和 age 的 posting list,互相 skip;
* 使用 bitset 数据结构,对 gender 和 age 两个 filter 分别求出 bitset,对两个 bitset 做 AN 操作。


首先选择最短的 posting list,然后从小到大遍历。遍历的过程可以跳过一些元素,比如我们遍历到绿色的 13 的时候,就可以跳过蓝色的 3 了,因为 3 比 13 要小。

所需的时间比完整遍历三个 posting list 要快得多


PostgreSQL 从 8.4 版本开始支持通过 bitmap 联合使用两个索引,就是利用了 bitset 数据结构来做到的。
分享到:
评论

相关推荐

    MySQL联合索引功能与用法实例分析

    主要介绍了MySQL联合索引功能与用法,结合具体实例形式分析了联合索引的概念、功能、具体使用方法与相关注意事项,需要的朋友可以参考下

    Mysql原理(二):索引的底层原理

    联合索引:多列组成一个索引 全文索引:对文本的内容进行分词,进行搜索 聚簇索引: 值的逻辑顺序和表数据行的顺序数据相同; 聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果...

    常见(MySQL)面试题(含答案).docx

    各种索引的概念:索引,主键,唯一索引,联合索引,索引分类 建立索引的使用场景 Myql中的事务回滚机制,持久性,隔离级别的实现 说一说drop、delete与truncate的区别 什么叫视图?游标是什么? 什么是存储过程?用...

    Oracle数据库实验操作

    实验155:联合索引的建立 247 实验156:基于函数索引的建立 249 实验157:位图索引的建立 249 实验158:反键索引的建立 252 实验159:索引组织表的建立 253 实验160:cluster表的建立 253 实验161:物化视图的建立 ...

    基于网格的DBSCAN:索引和推断

    其次,基于联合查找算法的概念,我们设计了一个类似于簇的森林结构,以减轻合并中的冗余。 此外,我们发现以不同顺序运行集群林可能会导致在合并步骤中执行不同数量的合并操作。 我们建议以统一的随机顺序执行合并...

    MYSQL常见的面试题带答案

    部分MySQL 面试题及其参考答案: 1. 什么是 ACID? ACID 是指数据库事务的四个特性: 原子性 (Atomicity)、一致...联合索引是一种由多个列组成的索引。它支持根据多个列进行查询,并可以提高查询性能。 7. 什么是视图?

    dict:具有类似 Python 功能的 C++ dict 类的概念验证

    具有类似 Python 功能的 C++ dict 类的概念验证。 我使用 Boost.Variant 作为值存储,它提供了一个安全的、通用的、基于堆栈的可区分联合容器。 它的接口包括运行时显式值检索接口和编译时值访问接口。 至于字典的...

    static.github.io

    联合国第一节概念 原型《无花果》的可视化和可视化 联合国科教文组织 未着色的页面 结构 手工制作的模板结构: 文件索引.html 文件样式.css样式ÀNE PAS MODIFIER 可修改的custom.css重组文件的所有权 档案«...

    大数据发展历史.pdf

    ⼤数据发展历史 1、⼤数据的发展历程 、⼤数据的发展历程 2008年被《⾃然》杂志专刊提出了BigData概念 萌芽阶段: 20世纪90年代到21世纪的样⼦,数据库技术成熟,数据挖掘理论成熟,也称数据挖掘阶段。 突破阶段: ...

    MySQL查询语句过程和EXPLAIN语句基本概念及其优化

    本文试图对其中的一些关键概念如执行过程、索引使用等做比较深入的探讨,知其然,知其所以然, 这样可以避免在原本通过MySQL简单优化就能获得很好效果的情况下,盲目跟风转向NoSQL存储或者投入资金升级基础设施。

    积分java源码-archive-uprising-java:来自已倒闭的SyncPrem启动的UprisingJava端口的存档

    每条记录都由索引、主题、模式、有效负载、即时、分区、偏移量和标题组成。 Uprising 有一个抽象 API,它由以下扩展点组成: 连接器 - 支持构建和运行可重用的源和/或目标适配器,使用 pull-iterator 语义连接各种...

    软件测试教学文档 java test

    数据合理性指数据在数据库中的类型,长度,索引等是否建的比较合理。 在项目名称中,数据库和数据库进程应作为一个子系统来进行测试。在测试这些子系统时,不应将测试对象的用户界面用作数据的接口。对于数据库管理...

    MySQL 5.1官方简体中文参考手册

    10.3.11. 校对确定较为复杂的一些特殊情况 10.3.12. 校对必须适合字符集 10.3.13. 校对效果的示例 10.4. 字符集支持影响到的操作 10.4.1. 结果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW语句 10.5. ...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    4.7 联合 4.8 本章小结 4.9 练习 第5章 创建和修改数据表 5.1 SQLserver中的对象名 5.1.1 模式名 5.1.2 数据库名 5.1.3 通过服务器命名 5.1.4 回顾默认值 5.2 CReATE语句 5.2.1 CREATEDATAASE 5.2.2 CREATETABLE ...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    4.7 联合 4.8 本章小结 4.9 练习 第5章 创建和修改数据表 5.1 SQLserver中的对象名 5.1.1 模式名 5.1.2 数据库名 5.1.3 通过服务器命名 5.1.4 回顾默认值 5.2 CReATE语句 5.2.1 CREATEDATAASE 5.2.2 CREATETABLE ...

    gasstationleetcode-cs102:[线性、树、图、DP]

    高级结构(例如段树、二叉索引树等) 课程大纲 - Java 高级算法 算法进阶:同题对应的新问题 第四周 回顾概念 简单排序:插入排序是三者中最好的(比较,交换) 高级排序:快速排序(枢轴、就地、不稳定) 高级排序...

    入门学习Linux常用必会60个命令实例详解doc/txt

    文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! ...入门学习Linux常用必会60个命令实例详解 ...Linux提供了大量的命令,利用它...

    序列多标签:具有时空上下文的统一视频注释方案

    对于基于内容的视频索引和检索,自动视频注释是一个具有挑战性但重要的问题。 在大多数现有作品中,注释被表述为单个镜头的多标签问题。 但是,视频从本质上说在语义概念的时空上下文中是有益的。 在本文中,我们将...

    SQL Server 2008编程入门经典(第3版)

    7.1 子查询的概念 7.2 关联子查询 7.2.1 关联子查询的工作原理 7.2.2 在WHERE子句中的关联子查询 7.2.3 处理NULL数据——ISNULL函数 7.3 派生表 7.4 EXISTS运算符 7.5 混合数据类型:CAST和CONVERT 7.6 MERGE命令 ...

Global site tag (gtag.js) - Google Analytics