MongoDB 索引:String 与 Int

Jat*_*t90 2 javascript database indexing mongodb

数据库管理新手。我有一个书籍数据库,我想为 ISBN 创建一个长度为 13 个字符的索引。示例:'9781509825889'

目前我正在使用字符串索引,但我已经阅读了关于是否存储为 int 或字符串以进行索引优化的冲突点。

看起来我有 Int32 或 Int64 选项,我认为上面的 ISBN 对于 Int32 来说太大了,但是否值得切换到 Int64 进行查询优化,还是应该坚持使用字符串?是否有任何显着的性能提升?

谢谢

kri*_*sad 7

MongoDb 索引不依赖于字段的数据类型,因此将其放入Stringor Int32or并不重要Int64

所有索引都经过哈希处理,这就是它不依赖于您使用的数据类型的原因。

参考:

  1. 字段类型在 MongoDB 索引中重要吗?


pra*_*ad_ 5

您可以选择创建 astring或 a long(Int64)。Int32 不能容纳大小。

字符串数据存储和索引存储大小会稍大一些。例如,我创建了 100 万个文档,其数字和字符串数据类型为 isbn 数字(在两个不同的集合中)。示例文档如下所示:{ "_id" : ObjectId("5dc8d8fef25cf42fe848076d"), "isbn" : 1000000999999 }. 该db.collection.stats()节目的大小的信息:

"size" : 36000000,
"count" : 1000000,
"avgObjSize" : 36,
"storageSize" : 12169216,
"indexSizes" : {
        "_id_" : 9920512,
        "isbn_1" : 10887168
},

"size" : 46000000,
"count" : 1000000,
"avgObjSize" : 46,
"storageSize" : 15015936,
"indexSizes" : {
        "_id_" : 9916416,
        "isbn_1" : 11018240
},
Run Code Online (Sandbox Code Playgroud)

此外,请注意,无论数据类型如何,对 isbn 的查询通常都同样快。

ISBN 显示为结构化数字,例如,978-3-16-148410-0。如果您可能在应用程序中以该格式使用它,则可以将其存储为结构化字符串。