MongoDB - 唯一索引与复合索引

Zai*_*sud 7 mongodb mongodb-indexes

假设一个包含3个字段的假设文档:

  1. _id:ObjectId
  2. emailAddress:string
  3. 帐号:字符串

现在,给定一个关于emailAddress和帐户的查询,以下两个索引中的哪一个将表现更好:

  1. 仅限emailAddress上的唯一索引(假设它是一个唯一字段)
  2. 帐户和emailAddress上的复合索引

Rem*_*iet 15

在性能方面,差异最小.由于您的电子邮件地址是唯一的,因此任何具有电子邮件字段的复合索引都不会比单独使用电子邮件地址的索引更有帮助.这样做的原因是您的电子邮件字段已经具有最大的基数,并且任何其他索引字段都无法帮助数据库更快地过滤记录,因为它始终只使用电子邮件字段到达正确的文档.

在内存使用方面(这对像MongoDB这样的数据库非常重要),电子邮件索引本身也要小得多.

TL; DR:仅在电子邮件地址上使用索引.

  • 那应该很容易扣除.如果索引A(仅电子邮件)使得与索引B(复合)完全相同的b树行走,则不存在复合索引可以更快的情况. (2认同)