什么更快? “爆炸”或其他专栏?

时间:2011-03-19 18:01:59

标签: php mysql explode

我的情况是我需要在我的数据库中存储多个值,但它们大约是。相同的类型,所以现在我不知道将这些值存储为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或多列连接?重要的是要注意,我总是需要它们(一个接一个)并且排序并不重要 - 所以我认为第一个选项 - 是更好,更快?

5 个答案:

答案 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