我的情况是我需要在我的数据库中存储多个值,但它们大约是。相同的类型,所以现在我不知道将这些值存储为MySQL中的 VARCHAR 字段中的字符串更快,用逗号分隔
1,2,3,4,5
然后将我们需要的每一个爆炸它们
$values = explode(",", $stringFromDatabase);
其中 $ stringFromDatabase 是来自 mysql_query + mysql_fetch_array 的字符串,并使用逐个获取它们$ values [0] , $ values [1] 等等
或
为每个变量添加另一列(最多7行),然后为特定行调用数据库,并使用标准 mysql_query + mysql_fetch_array 过程按列分别获取它们?
那么,一个列与commmas或多列连接?重要的是要注意,我总是需要它们(一个接一个)并且排序并不重要 - 所以我认为第一个选项 - 是更好,更快?
答案 0 :(得分:5)
最好有多列。它是数据库规范化的一部分,没有多值列。
在您的情况下 - 如果您需要从多值3
选择“1,2,3,4,5
”,该怎么办?这将是非常具有挑战性的。但是对于多列,我可以轻松地SELECT * FROM Table Where Column3 = 3
。
答案 1 :(得分:3)
数据库的一般经验法则是列应该是原子的。换句话说,它们应该代表一条信息而只代表一条信息。将CSV列表填入列中会破坏这一原则,从长远来看,这可能会让您的生活变得更加困难,特别是在对您存储的数据进行分析时。我建议每个值有一列是最好的选择。
答案 2 :(得分:3)
为每个值使用单独的列。见1NF
答案 3 :(得分:1)
你不应该问“哪个更快” 速度不是唯一要考虑的因素。 太空火箭确实比你的家用汽车快,但你不用火箭开到商场 所以,你应该问“适当的方式” 并规范化您的数据库是唯一正确的方法。
答案 4 :(得分:0)
如何使用类似的东西:
int AutoId, // your primary key int ColumnIndex // 1 for col 1 int ColumnValue // the value for e.g. for col 1 this does not need space for unused columns and gives the benefit to query like select ColumIndex, ColumnValue where AutoID = 42 order by ColumnIndex