繁体   English   中英

如何有效地将动态列表存储到MySQL列中?

[英]How to store a dynamic List into MySQL column efficiently?

我想将数字列表以及其他一些字段存储到MySQL中。 列表中的元素数量是动态的(有时可以容纳约60个元素)

当前,我将列表存储到varchar类型的列中,并且完成了以下操作。

e.g. aList = [1234122433,1352435632,2346433334,1234122464]

在存储时,aList被隐藏为字符串,如下所示

aListStr = str(aList)

并在读取时将字符串转换回列表,如下所示。

aList = eval(aListStr)

大约有1000万行,并且由于我以字符串形式存储,所以它占用了大量空间。 最有效的方法是什么?

另外,存储字符串列表而不是数字的有效方法应该是什么?

由于您希望存储整数,一种有效的方法是将它们存储在INT / DECIMAL列中。

创建一个将保留这些数字的附加表,并添加一个ID列以将记录与其他表相关联。

另外,存储字符串列表而不是数字的有效方法应该是什么?

除了我所说的,您可以将它们转换为十六进制代码,这将非常容易并且占用更少的空间。

请注意,较大的VARCHAR可能会严重影响性能。 当完成诸如sotring之类的操作时,VARCHAR(2)和VARCHAR(50)确实很重要,因为MySQL根据VARCHAR最大大小为其分配了固定大小的内存片。 当这些切片太大而无法存储在内存中时,MySQL会将它们存储在磁盘上。

MySQL还具有SET类型,其作用类似于ENUM,但可以容纳多个项目。 当然,您必须有一个有限的列表,目前MySQL仅支持多达64个不同的项。

我不必担心存储空间,而要担心记录检索,即可索引性/搜索。

例如,我想象在WHERE子句中执行LIKE或REGEXP以在列表中查找单个项目比将每个列表项规范化为单独表中的一行要贵得多。

但是,如果您永远都不需要再次执行这些查询,那么这些列就无关紧要了。

由于您正在使用关系数据库,因此您应该知道,将非原子值存储在各个字段中甚至会破坏第一个范式。 您很有可能应该遵循Don的建议并将这些值保留在相关表中。 我不能肯定地说,因为我不知道您的问题所在。 为该数据选择RDBMS完全是一个错误的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM