刚开始涉足数据库管理。我有一个图书数据库,我想为13位的ISBN创建索引。例如:'9781509825889'
目前,我正在使用字符串索引,但我读到了一些有关存储为int还是string以进行索引优化的矛盾观点。
看起来我有Int32或Int64选项,我认为上述ISBN对于Int32来说太大了,但是否值得切换到Int64进行查询优化,还是应该坚持使用字符串?是否有任何显著的性能提升?
谢谢
刚开始涉足数据库管理。我有一个图书数据库,我想为13位的ISBN创建索引。例如:'9781509825889'
目前,我正在使用字符串索引,但我读到了一些有关存储为int还是string以进行索引优化的矛盾观点。
看起来我有Int32或Int64选项,我认为上述ISBN对于Int32来说太大了,但是否值得切换到Int64进行查询优化,还是应该坚持使用字符串?是否有任何显著的性能提升?
谢谢
String
、Int32
或Int64
中都没有关系。你可以选择创建一个 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
。如果您在应用程序中可能会使用该格式,则可以将其存储为结构化字符串。