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

2024-10-01 11:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

在存储时,列表被转换为字符串,如下所示

^{pr2}$

在读取时,字符串被转换回如下列表。在

aList = eval(aListStr)

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

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


Tags: 方法字符串元素类型列表数量evalmysql
3条回答

我不太担心存储空间,而更担心记录检索,即索引/搜索。在

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

但是,如果您不需要对这些列执行这样的查询,那么它就不重要了。在

MySQL还有一个SET类型,它的工作方式类似于ENUM,但可以保存多个项。 当然,你必须有一个有限的列表,目前MySQL最多只支持64个不同的项。在

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

创建一个包含这些数字的附加表,并添加一个ID列来将这些记录与其他表关联起来。在

Also what should be the efficient way for storing list of strings instead of numbers?

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

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

相关问题 更多 >