Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongodb中,索引是正在进行的活动还是我们需要一个cron?_Mongodb - Fatal编程技术网

在mongodb中,索引是正在进行的活动还是我们需要一个cron?

在mongodb中,索引是正在进行的活动还是我们需要一个cron?,mongodb,Mongodb,对不起,如果这个问题很愚蠢的话。 我不熟悉数据库的整个索引,我想知道我是否发出了下面的命令 > db.posts.ensureIndex({location:"2d"}) 即使发布了新条目,数据库也会被索引吗?还是在每次新输入后都需要输入此命令 索引是否对2000多个条目的数据库也有很大影响?一旦索引到位,它将始终用于任何后续读取和写入。您不需要继续执行该命令 请记住,对现有的大型数据集发出ensureIndex,将导致它立即索引其中的所有内容,并且可能会阻塞 这里有一个关于索引建议的完

对不起,如果这个问题很愚蠢的话。 我不熟悉数据库的整个索引,我想知道我是否发出了下面的命令

> db.posts.ensureIndex({location:"2d"})
即使发布了新条目,数据库也会被索引吗?还是在每次新输入后都需要输入此命令


索引是否对2000多个条目的数据库也有很大影响?

一旦索引到位,它将始终用于任何后续读取和写入。您不需要继续执行该命令

请记住,对现有的大型数据集发出
ensureIndex
,将导致它立即索引其中的所有内容,并且可能会阻塞

这里有一个关于索引建议的完整官方常见问题解答:
您应该创建与正在执行的查询类型相匹配的索引。而且,它非常容易使用
解释
并查看查询需要多长时间。当您看到自己在反复执行特定类型的查询时,可以对其进行适当的索引以提高性能

MongoDB包含一个explain命令,用于确定查询的方式 正在处理中,尤其是他们是否正在使用 指数explain可以从驱动程序的列表中使用,也可以从 外壳:

db.comments.find({tags:'mongodb'}).sort({created_at:-1
}).explain()
这将返回许多有用的信息,包括 扫描的项目数,查询在中处理所需的时间 毫秒,它为查询优化器尝试的索引和 最终使用

还是在每次新输入后都需要输入此命令

否。数据库中的条目更新时,索引也会更新

对于一个包含2000多个条目的数据库,索引是否也会产生很大的影响

说起来不容易。这取决于您正在运行的查询以及MongoDB内存中有多少数据


如果您的查询最终加载了2000个条目中的大部分,那么索引可能不会有多大作用。如果您的查询只加载一个条目,那么索引可能很有用。

MongoDB中的索引工作原理与其他关系数据库服务器(SQLServer、MySQL等)中的索引非常相似,并且具有相同的优缺点:

  • 索引可以显著加快读取速度
  • 索引可能会降低写入速度(写入操作必须同时更新数据和保存索引信息的btree)

若您的应用程序读起来很重,那个么在适当的索引中,您将看到DB响应时间的显著改进。遵循jdi在他的帖子中所说的,这是一个很好的起点。

嗨,jdi,谢谢你的回答,现在更清楚了。我想知道的另一件事是改变索引的可能性。我的意思是删除一个属性并索引另一个。是的。有一个用于删除和索引的命令。然后你就创建一个新的。这一切都在文档中: