【发布时间】:2019-12-31 03:25:11
【问题描述】:
考虑以下复合索引:
{name: 1, occupation: 1, time: 1}
{name: 1, time: 1}
假设您有两种类型的查询:
{name: 'john', occupation: 'engineer'}
{name: 'allan', time: {$lt: 3}}
第二种查询能否使用第一种索引? 请注意,它没有指定职业。
它和使用第二个索引一样有效吗?
【问题讨论】:
考虑以下复合索引:
{name: 1, occupation: 1, time: 1}
{name: 1, time: 1}
假设您有两种类型的查询:
{name: 'john', occupation: 'engineer'}
{name: 'allan', time: {$lt: 3}}
第二种查询能否使用第一种索引? 请注意,它没有指定职业。
它和使用第二个索引一样有效吗?
【问题讨论】:
第二种查询能否使用第一个索引?请注意,它没有指定职业。
是的。
但是,与{name: 1, time: 1} 相比,它的效率相对较低(取决于您拥有多少职业,以及您拥有多少同名)。
任何一个索引都应该没问题,因为name 应该很有选择性。
查看db.collection.explain() 和生成的explain results 以检查查询计划以及您的查询使用了哪个索引。
请注意,如果您的集合非常小,则任何一个索引都可以。要进行更逼真的模拟,请使用mgeneratejs 之类的东西插入随机数据,该数据可以生成例如100 万个示例文档。
【讨论】: