【问题标题】:Why would the index on a field be a different size depending on if it is ascending or descending in MongoDB为什么字段上的索引的大小取决于它在 MongoDB 中是升序还是降序
【发布时间】:2015-08-31 05:24:44
【问题描述】:

我的集合中的“created”字段有两个单一索引。一个索引按升序排序,另一个按降序排序。降序排序的索引大于升序排序的索引。 created 字段包含一个 Javascript Date 对象。这是什么原因造成的?

"indexSizes" : {
    "_id_" : 212862160,
    "created_1" : 136424736,
    "created_-1" : 252376768
},

这是来自 collection.getIndexes() 的详细信息。唯一的区别是降序索引是在后台创建的。

{
    "v" : 1,
    "key" : {
        "created" : 1
    },
    "name" : "created_1",
    "ns" : "Production.accounts"
},
{
    "v" : 1,
    "key" : {
        "created" : -1
    },
    "name" : "created_-1",
    "ns" : "Production.accounts",
    "background" : true
}

【问题讨论】:

  • 现在这是一个公平的问题。有点想知道为什么“升序”形式的大小小于_id 索引。作为记录,如果ObjectId 已经是“单调的”或“一直在增加”,那么您可能会认为_id 是您收藏中“创建顺序”的自然指标。当然,除非您出于其他原因需要时间戳。
  • created 中存储的值的类型是什么?你能重现这个吗?我尝试了一个简单的 mongo 集合,并且索引大小对于升序/降序是相同的
  • 后台索引最终会大于在前台创建的索引。此外,您不需要同时创建升序和降序版本,因为单字段索引的顺序无关紧要。

标签: mongodb sorting indexing mongodb-query


【解决方案1】:

区别在于前台创建升序索引,后台创建降序索引。

来自the docs 后台索引创建:

后台索引构建需要更长的时间才能完成并生成索引 最初比内置的索引更大或更不紧凑 前景。随着时间的推移,内置索引的紧凑性 background 将接近前台构建的索引。

因此,如果您希望索引尽可能紧凑,请在前台创建索引,但随着时间的推移,后台索引也会变得更加紧凑。

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 2014-10-24
    • 2012-09-02
    • 2014-07-28
    • 1970-01-01
    • 2014-02-19
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多