mongodb在前台直接运行建立索引命令的话,将造成整个数据库阻塞,因此索引建议使用 background 的方式建立。但是这也会带来一定的问题,在
2.6 版本之前,在 secondary server 中即使使用 background 方式建立索引,secondary 还是会以
foreground 方式建立索引,它导致 secondary 同样引发数据库阻塞问题。2.6 版本修复了这个 Bug,2.6 版之后使用
background 方式建立索引时,真正转向后台运行了。
为了尽量降低建立索引对 MongoDB Server 的影响,有一种方法是把 MongoDB Server 转换成 standalone 模式后建立。具体做法如下:
1.首先把 secondary server 停止,在取消 --replSet 参数,并且更改 MongoDB port 之后重新启动 MongoDB,这时候 MongoDB 将进入 standalone 模式;
2.在 standalone 模式下运行命令 ensureIndex 建立索引,建议使用 foreground 方式运行;
3.建立索引完毕之后关闭 secondary server 按正常方式启动;
4.根据上述 1~3 的步骤轮流为 secondary 建立索引,最后把 primary server 临时转换为 secondary server,同样按 1~3 的方法建立索引,再把其转换为 primary server。
这种方式还是比较麻烦的,但可以把建立索引操作对 MongoDB 的影响降到最低,在有些情况下还是值得做的。
(一般来说)不需要。
除非:你的MongoDB的数据量很大(比如我遇到的 270万条),且查询速度太慢(要好几秒),此时,才需要建索引,目的是提高查询速度(建索引后,每次查询只要不到0.01秒)
另外:每个Collection,都有个默认的 key是 _id 的index,是MongoDB系统自己建的。你也无法删除,也不需要删除,也无需你手动单独创建该索引。
详见:(百度搜)
【已解决】用mongo的shell给MongoDB创建索引以提高查询速度