`

一些概念:联合索引

 
阅读更多
联合索引

如何联合索引查询?
所以给定查询过滤条件 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-数据库-索引详解

    但该索引可以包含多个列(联合索引)。 非聚集索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表可以包含多个非聚集索引。 ### MySQL 索引的分类 MySQL 索引包括普通索引、惟一性索引、全文索引、单列...

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

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

    Oracle数据库实验操作

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

    浅谈MYSQL中的索引优化-收藏学习.pdf

    索引覆盖来优化索引,最后阐述了如何对联合索引进行优化。 索引本质上是一种数据结构,用来提升检索目标数据的效率,在MySQL数据库中利用 B+树来实现。所谓的B+树,就是把原先B树中分散在各个节点的数据都驱赶到最...

    基于网格的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重组文件的所有权 档案«...

    文献检索与科技论文课件:第三讲 文献检索基础.ppt

    主要途径有:各类外文电子全文刊数据库、各类中文电子全文刊数据库、国家科技图书文献中心、全国期刊联合目录和 Google文献数据库。 二、文献数据库的主要作用 文献数据库的主要作用有三点:(1)了解某种最新概念...

    大数据发展历史.pdf

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

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

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

    《Java语言实验与课程设计指导》.doc

    + 核心功能: 在图书业务类的基础上增加了按书名和作者名联合查询的功能。 + 技术点: 使用泛型链表LinkList存储被租阅的图书、用泛型遍历器Iterator来实现遍历查找,改写了之前的信息修改、删除方法。 * 实验例题3-...

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

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

    43道MySQL高频题整理(附答案背诵版).md

    - 将题目按知识点分类,如基础查询、联合查询、子查询、数据库设计、索引优化等,便于读者有针对性地学习和复习。 - 每类题目后附有知识点总结,帮助读者系统复习相关内容。 4. **实战案例**: - 提供与实际应用...

    软件测试教学文档 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 ...

Global site tag (gtag.js) - Google Analytics