MongoDB - 唯一索引与复合索引

时间:2012-03-07 09:18:11

标签: mongodb mongodb-indexes

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

  1. _id:ObjectId
  2. emailAddress:string
  3. account:string
  4. 现在,鉴于对emailAddress AND帐户的查询,以下两个索引中的哪一个将表现更好:

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

2 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:3)

当涉及索引时,目标是创建具有最高可能基数(或“选择性”)的单个索引。尝试编写每个查询使用1(复合)索引的查询。唯一索引具有最大基数。复合具有较少选择性字段的唯一索引不能进一步增加该最大值。添加更多索引只会减慢find(),update()和remove()查询的速度。所以要“精益求精”。

但是,如果您在帐户字段上使用sort(),在电子邮件字段上执行find(),则应使用复合索引:

  

通常查询多个键并对其进行排序   结果。对于这些情况,复合索引是最好的。   http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

所以想一想!如果需要按其他字段对数据进行排序,则通常需要复合索引。