MongoDB的常见问答—索引

来源:互联网 发布:ubuntu 16.04 安装ie 编辑:程序博客网 时间:2024/05/20 05:09

这篇文章提出了一些关于索引的常见问题,更详细的信息请参见https://docs.mongodb.com/manual/faq/indexes/

一、如何创建索引?
在集合上创建索引采用db.collection.createIndex()方法. 创建索引属于管理性的操作。一般来说,应用程序不应该经常地调用db.collection.createIndex()方法。

注意:
建立索引影响性能。参考建立索引是如何影响数据库性能的?管理员在建立索引之前应该仔细考虑其对数据库性能的影响。

二、建立索引是如何影响数据库性能的?
当为一个集合创建索引时,集合所在的数据库在索引建立完成之前是不允许读和写操作的。如果你想要建立一个大型的索引,你应该考虑在后台建立索引和在副本集上建立索引。

三、如何查看在一个集合上都有哪些索引?
用db.collection.getIndexes()方法

四、如何查看一条查询语句是否应用了索引?
用explain()方法检查MongoDB 如何处理一条查询。

五、如何确定应该在哪些字段上建立索引?
在哪些字段上建立索引有很多决定因素,包括选择率(选择率是一个查询利用索引缩小结果集的能力)、多查询模型的支持(query shape是指查询谓词、排序和投影规范的组合)、索引的大小。

六、如何查看索引的大小?
db.collection.stats()包含集合上每一个索引的大小信息。

七、写操作如何影响索引?
写操作有可能会更新索引。
如果写操作更改了一个索引字段,MongoDB 会更新将更改字段作为key的所有索引。
当使用MMAPv1存储引擎时,如果一个更新操作引起一个文档的大小超过为其分配的记录大小,MongoDB 会将该文档转移到一个新的记录中,此时就需要更新与该文档有关的所有索引,不管字段的修改。
所以,如果你的应用写操作很频繁,索引就会影响性能。

原创粉丝点击