MongoDB (五) 索引机制 |
您所在的位置:网站首页 › mongodb结构 › MongoDB (五) 索引机制 |
一、相关术语
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-树的工作原理。 B- 树: 基于B树,但是子节点数量可以超过2个。 由于 B树/B-树的工作过程过于复杂,但本质上它是一个有序的数据结构。我们用数组来理解它。假设索引为{a: 1}(a 升序): 假设集合有两个索引 {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 |