MST

星途 面试题库

面试题:MongoDB中如何计算索引基数

请阐述在MongoDB里计算索引基数的基本方法,以及基数对于查询性能可能产生的影响。
14.0万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

计算索引基数的基本方法

在MongoDB中,可以使用collStats命令来获取集合的统计信息,其中包括索引的基数相关信息。例如:

db.collection_name.stats().indexCounters.forEach(function(index) {
    print(index.key, index.accesses, index.size, index.count);
});

这里的index.count 近似表示索引的基数,即索引键的唯一值数量。另外,也可以通过explain执行计划来间接观察基数对查询的影响,explain输出中可能包含有关索引选择性(与基数相关)的信息。

基数对查询性能的影响

  • 高基数索引
    • 优点:当索引基数较高时,索引能够更有效地过滤数据。例如,在用户集合中,以email字段建立索引,由于email基本每个用户都不同,基数高。对于根据email查询单个用户的操作,MongoDB可以快速定位到所需文档,查询性能高。
    • 缺点:但高基数索引会占用更多的磁盘空间和内存,因为需要存储更多不同的键值对。在插入、更新和删除操作时,维护索引的开销也更大。
  • 低基数索引
    • 优点:低基数索引占用空间相对较小,例如在用户集合中,以gender字段建立索引,只有“男”“女”两种可能值,基数低。对于一些基于性别进行统计的聚合操作可能有一定帮助。
    • 缺点:然而对于查询操作,低基数索引过滤能力弱。比如查询“性别为男的用户”,可能会返回大量文档,MongoDB可能无法利用索引高效定位,查询性能较差。如果基数过低,索引甚至可能不会被查询优化器使用,导致全表扫描。