MongoDB
MongoDB
Docker
docker run -d --name mongo --rm -p 127.0.0.1:27017:27017 mongo:4
Practice
MongoDB内部会定期对每种形状的查询操作,以及可用的索引做测验,根据测验结果,选择性能最好的那个,作为某个形状查询操作的首选索引。
索引除了用来过滤,还可以用来sort。而且,如果不使用索引来做sort,就需要使用CPU,在内存里通过计算来排序。内存排序操作是比较耗资源,且性能也不是最好的。因此,在选择索引时,除了考虑尽可能用到索引来做快速过滤外,还会尽可能使用索引来做排序(sort),尽量避免内存排序。
通常,MongoDB引擎会在现有可用的索引中,能选择出性能最好的来用。但在实际环境中,我们经常发现其他客户创建的索引并不是非常合适。或者说,有时候,我们可以创建更合适的索引来获得更好的性能。 如果您觉得MongoDB引擎选择的索引不合适,您可以使用hint()来强制这个操作使用某个索引,还可以进一步分析这个索引是否比MongoDB引擎自己选择的性能更好。 其实,用什么索引性能更好,不仅看操作的逻辑,还看表里的数据量和数据的分布。这是个很系统的问题。简单来说,如果是不用的索引,应该删除掉来节约内存。如果您使用MongoDB Atlas或企业版的Ops Manager,他们是会根据历史操作,给您性能优化建议的。您也可以直观地看到哪些索引很少用,应该删除。