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,我已经更改了。
错误表明您在test.crawl01上没有索引。这是正确的。当你这样做的时候db.system.indexes.find()
test.crawl02的_id字段上有一个索引,而不是test.crawl01在test.crawl01上创建索引。