MongoDB在capped集合上查询_id,如果没有_id索引,则集合性能会很差

本文关键字:集合 id 性能 索引 如果没有 查询 capped MongoDB | 更新日期: 2023-09-27 18:26:28

i创建一个带上限的集合(crawl02)并为该带上限的集创建索引。

> db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.crawl02", "name" : "_id_" }

当我运行应用程序和带有查询上限的集合时,MongoDB Log总是输出以下日志:

[conn2] warning: _id query on capped collection without an _id index, performance will be poor collection: test.crawl02

我的代码语句查询一个有上限的集合(c#)

 var cursor = this.QueueCollection    //crawl02
           .Find(Query.GT("_id", this._lastId))
           .SetFlags(QueryFlags.AwaitData |QueryFlags.TailableCursor 
                    | QueryFlags.NoCursorTimeout)
           .SetSortOrder(SortBy.Ascending("$natural"));
 return (MongoCursorEnumerator<QueueMessage<T>>)cursor.GetEnumerator();

从中读取关于游标变量的消息:

while(true){
   if (this._cursor.MoveNext())
      return this._currsor.Current;
   else
      return null
}

我不明白为什么mongodb削弱了我的crawl02没有索引。

====================================通过更新

好的,我在MongoDB办公网站上找到了一篇关于Tailable Cursors的文章,消息是:

Tailable cursors are only allowed on capped collections and can only return objects in natural order. Tailable queries never use indexes.

那是因为mongodb日志警告?Tailable queries never use indexes.??

===================更新2对不起,我忘了mongodb日志警告是关于测试的。crawl02,我已经更改了。

MongoDB在capped集合上查询_id,如果没有_id索引,则集合性能会很差

错误表明您在test.crawl01上没有索引。这是正确的。当你这样做的时候db.system.indexes.find()test.crawl02的_id字段上有一个索引,而不是test.crawl01在test.crawl01上创建索引。