我想在MySQL中存储一个数字列表和一些其他字段。列表中元素的数量是动态的(有时它可以容纳大约60个元素)
目前我将列表存储到varchar类型的列中,并完成以下操作。在
e.g. aList = [1234122433,1352435632,2346433334,1234122464]
在存储时,列表被转换为字符串,如下所示
^{pr2}$在读取时,字符串被转换回如下列表。在
aList = eval(aListStr)
大约有1000万行,由于我是以字符串形式存储的,所以它占用了大量空间。最有效的方法是什么?在
另外,存储字符串列表而不是数字的有效方法是什么?在
我不太担心存储空间,而更担心记录检索,即索引/搜索。在
例如,我想象在WHERE子句中执行LIKE或REGEXP来查找列表中的一个项目,要比将每个列表项规范化为一个单独表中的一行要昂贵得多。在
但是,如果您不需要对这些列执行这样的查询,那么它就不重要了。在
MySQL还有一个SET类型,它的工作方式类似于ENUM,但可以保存多个项。 当然,你必须有一个有限的列表,目前MySQL最多只支持64个不同的项。在
由于您希望存储整数,一种有效的方法是将它们存储在INT/DECIMAL列中。在
创建一个包含这些数字的附加表,并添加一个ID列来将这些记录与其他表关联起来。在
除了我所说的,你可以将它们转换成十六进制代码,这将非常容易,占用更少的空间。在
请注意,大VARCHAR可能会严重影响性能。 VARCHAR(2)和VARCHAR(50)在执行sotring之类的操作时确实很重要,因为MySQL根据VARCHAR的最大大小为它们分配固定大小的内存片。 当这些片太大而无法存储在内存中时,MySQL将把它们存储在磁盘上。在
相关问题 更多 >
编程相关推荐