notes icon indicating copy to clipboard operation
notes copied to clipboard

MongoDB Index Cheat Sheet or MongoDB索引及排序备忘

Open lanlin opened this issue 5 years ago • 2 comments

复合索引排序对照

排序及索引对照 { "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)

  1. 如果有 【多个】 排序字段时,排序字段的顺序要与查询条件中排序字段的顺序一致,并且升降序也要一致。

  2. 如果有 【多个】 范围字段时,将区分度越 【低】 的字段放在更前面。

    例如:性别 -> 年龄 -> 籍贯 性别的区分度为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 }

lanlin avatar Sep 09 '20 09:09 lanlin

MongoDB 查询及索引设计原则 #79

lanlin avatar Sep 09 '20 09:09 lanlin

MongoDB Indexing Blog: https://www.mongodb.com/blog/tags/indexing

image

lanlin avatar Jul 23 '21 02:07 lanlin