notes
notes copied to clipboard
MongoDB Index Cheat Sheet or MongoDB索引及排序备忘
复合索引排序对照
| 排序及索引对照 | { "username" : 1, "date" : -1 } | { "username" : 1, "date" : 1 } |
|---|---|---|
| sort( { username: 1, date: -1 } ) | 命中 | 无效 |
| sort( { username: -1, date: 1 } ) | 命中 | 无效 |
| sort( { username: 1, date: 1 } ) | 无效 | 命中 |
| sort( { username: -1, date: -1 } ) | 无效 | 命中 |
复合索引原则 【ESR】
从左到右依次为:全等字段(E, Equality) -> 排序字段(S, Sort) -> 范围字段(R, Range)
-
如果有 【多个】 排序字段时,排序字段的顺序要与查询条件中排序字段的顺序一致,并且升降序也要一致。
-
如果有 【多个】 范围字段时,将区分度越 【低】 的字段放在更前面。
例如:性别 -> 年龄 -> 籍贯 性别的区分度为2,年龄的区分度为100,籍贯的区分度为10000
举一个栗子🌰
有一个复合索引为 { a:1, b:1, c:1, d:1 }:
| 查询条件 | 索引命中情况 |
|---|---|
| db.data.find( { a: 5 } ).sort( { b: 1, c: 1 } ) | { a: 1 , b: 1, c: 1 } |
| db.data.find( { b: 3, a: 4 } ).sort( { c: 1 } ) | { a: 1, b: 1, c: 1 } |
| db.data.find( { a: 5, b: { $lt: 3} } ).sort( { b: 1 } ) | { a: 1, b: 1 } |
MongoDB 查询及索引设计原则 #79
MongoDB Indexing Blog: https://www.mongodb.com/blog/tags/indexing
