MongoDB (五) 索引机制

您所在的位置:网站首页 mongodb结构 MongoDB (五) 索引机制

MongoDB (五) 索引机制

2023-10-18 17:30| 来源: 网络整理| 查看: 265

一、相关术语 1.1、Index/Key/DataPage

索引、键、数据页分别是什么?

什么是索引

Covered Query,覆盖查询

如果所有需要的字段都在索引中,不需要额外的字段,就可以不再需要从数据页加载数据,这就是查询覆盖。

db.human.createIndex({firstName: 1, lastName: 1, gender: 1, age: 1})

IXSCAN/COLLSCAN

索引扫描/集合扫描(全表扫描)

Query Shape

查询形态,即查询条件:不同的查询条件对索引的影响是不同的,比如等值查询和范围查询。

Index Prefix

索引前缀:

db.human.createIndex({firstName: 1, lastName: 1, gender: 1, age: 1})

以上索引的全部前缀包括:

{firstName: 1} {firstName: 1, lastName: 1} {firstName: 1, lastName: 1, gender: 1}

所有索引前缀都可以被该索引覆盖,没有必要针对这些查询建立额外的索引;

Selectivity

过滤性:

在一个有10000条记录的集合中:

满足 gender= F 的记录有4000 条 满足 city=LA 的记录有 100 条 满足 ln=‘parker’ 的记录有 10 条

条件 ln 能过滤掉最多的数据,city 其次,gender 最弱。所以 ln 的过 滤性(selectivity)大于 city 大于 gender。

二、B树结构

索引背后是 B-树。要正确使用索引,必须先了解 B-树的工作原理。

screenshot-20220410-145641

B- 树: 基于B树,但是子节点数量可以超过2个。

由于 B树/B-树的工作过程过于复杂,但本质上它是一个有序的数据结构。我们用数组来理解它。假设索引为{a: 1}(a 升序):

screenshot-20220410-170501

三、索引执行计划

假设集合有两个索引

{city: 1} {last_name:1 }

查询:

db.members.find({ city: “LA”, last_name: “parker”})

问题:用哪个索引?

两个线程同时尝试两个索引看哪个索引跑的比较快就选谁。

3.1、explain() -- 写入10000条文档 for (var i=1;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3