3

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

> db.posts.ensureIndex({location:"2d"})

即使发布了新条目,数据库是否也会始终被索引?还是我需要在每个新条目后输入此命令?

索引对包含 2000 多个条目的数据库也有很大影响吗?

4

3 回答 3

3

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

请记住,ensureIndex在现有的大型数据集上发布将导致它立即索引那里的所有内容,并且可能会阻塞。

这里有一个关于索引建议的完整官方常见问题解答:http
://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ 您应该创建与您正在执行的查询类型相匹配的索引。此外,它非常易于使用explain并查看查询需要多长时间。当您看到您一遍又一遍地执行特定类型的查询时,您可以正确索引它以提高性能。

MongoDB 包含一个解释命令,用于确定查询的处理方式,特别是它们是否使用索引。explain 可以从驱动程序中使用,也可以从 shell 中使用:

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

于 2012-06-27T16:43:48.093 回答
1

还是我需要在每个新条目后输入此命令?

不会。更新数据库中的条目时会更新索引。

索引对包含 2000 多个条目的数据库也有很大影响吗?

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

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

于 2012-06-27T16:43:57.243 回答
1

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

  • 索引可以显着加快读取速度
  • 索引可以稍微减慢写入速度(写入必须更新数据和保存索引信息的 btree)

如果您的应用程序读取量很大,您将看到在适当的索引到位的情况下数据库响应时间的显着改善。关注jdi 在他的帖子中发布的 10Gen Indexing 链接——这是一个很好的起点。

于 2012-06-27T16:55:59.410 回答