【问题标题】:MongoDB Indexes: String vs IntMongoDB 索引:字符串与整数
【发布时间】:2019-11-11 01:09:07
【问题描述】:

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

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

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

谢谢

【问题讨论】:

标签: javascript database mongodb indexing


【解决方案1】:

您可以选择创建stringlong (Int64)。 Int32 无法容纳该大小。

字符串数据存储和索引存储大小会稍大一些。例如,我创建了一百万个具有数字和字符串数据类型的 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
},

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

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

【讨论】:

    【解决方案2】:

    MongoDb 索引不依赖于字段的数据类型,因此将其放入StringInt32Int64 都没有关系。

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

    参考文献:

    1. Does field type matter in a MongoDB index?

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 2016-05-10
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 2022-10-22
      • 2020-08-09
      • 2020-08-28
      相关资源
      最近更新 更多