MongoDB索引:字符串 vs 整数

5

刚开始涉足数据库管理。我有一个图书数据库,我想为13位的ISBN创建索引。例如:'9781509825889'

目前,我正在使用字符串索引,但我读到了一些有关存储为int还是string以进行索引优化的矛盾观点。

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

谢谢


以下是一些相关/类似的帖子:(1) MongoDB索引中字段类型是否重要?,(2) MongoDB索引数据类型对性能的影响?,以及(3) mongodb索引数据结构 - prasad_
2个回答

7
MongoDb索引不依赖于字段的数据类型,因此无论您将其放入StringInt32Int64中都没有关系。
所有索引都是哈希的,这就是为什么它不依赖于您使用的数据类型。
参考资料: 1. Does field type matter in a MongoDB index?

6

你可以选择创建一个 string 或者一个 long (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。如果您在应用程序中可能会使用该格式,则可以将其存储为结构化字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接