0

蒙哥数据库 1.4.1

2 个集合,相同的数据,但对字段“x”使用不同的数据类型(foo - string,bar - number):

> db.foo.ensureIndex({x:1});
> db.bar.ensureIndex({x:1});
> db.foo.stats();
{
    "ns" : "impressions.foo",
    "count" : 50000,
    "size" : 23519184,
    "avgObjSize" : 470.38368,
    "storageSize" : 37797888,
    "numExtents" : 8,
    "nindexes" : 2,
    "lastExtentSize" : 15290368,
    "paddingFactor" : 1,
    "systemFlags" : 0,
    "userFlags" : 0,
    "totalIndexSize" : 2526384,
    "indexSizes" : {
        "_id_" : 1463504,
        "x_1" : 1062880
    },
    "ok" : 1
}
> db.bar.stats()
{
    "ns" : "impressions.bar",
    "count" : 50000,
    "size" : 21594256,
    "avgObjSize" : 431.88512,
    "storageSize" : 22507520,
    "numExtents" : 7,
    "nindexes" : 2,
    "lastExtentSize" : 11325440,
    "paddingFactor" : 1,
    "systemFlags" : 0,
    "userFlags" : 0,
    "totalIndexSize" : 2730784,
    "indexSizes" : {
        "_id_" : 1463504,
        "x_1" : 1267280
    },
    "ok" : 1
}

x_1 在情况 2 中更大,而您期望相反?

4

2 回答 2

0

索引中的 int 值(或 long )在 mongodb 中存储为 double ,我猜是 8 个字节。因此,与字符串值相比,这可能是索引大小更大的原因。

检查源代码。 https://github.com/mongodb/mongo/blob/v2.2/src/mongo/db/key.cpp#L312

于 2013-06-12T13:32:10.220 回答
0

该整数被存储为 bson 类型 16,它是一个 32 位整数。如果整数是一个分类值,您可以存储一个只有一个字符长的字符串,它应该只有 8 位(UTF-8 字符串)。

于 2015-12-17T19:14:19.827 回答