PHP-MySql中的一列或多列

时间:2012-06-18 09:41:21

标签: php mysql database-design

假设我想在SQL表中存储值a,b,c 我必须通过像abc这样的分隔符存储在SQL DB的一个单独列中的一个选项(考虑a,b,c值不包含' - ')然后在检索它之后通过PHP解析它。另一个选择是我应该将所有三个值存储在不同的列中。

我的问题是:

  

存储在一列+检索+解析会花费更多时间吗?

  

存储在三个不同的列中并检索它将需要更多   时间和资源?

注意:在任何时候我都需要a,b,c的所有三个值,即如果我正在检索' a'然后我也需要检索b和c。

7 个答案:

答案 0 :(得分:0)

您应该将它们存储在3个单独的列中。 DB是为此而制作的,你不应该害怕性能问题:)

这将为您节省选择数据后解析的痛苦,并且您将能够使用数据库的所有可能性:计算每个值的出现次数......

答案 1 :(得分:0)

我认为,将三列用作索引是正确的,因为MySQL在B-tree structure中存储索引,这比使用PHP检索和解析更快。 More about indexing

答案 2 :(得分:0)

将所有变量存储在一列中可能会略微加快,因为MySQL只有一个表可以查询而不是三个。但是,您应该分割表格的问题不应该与您的表现有任何关系,而是与数据模型的规范化有关。有关详情,请参阅http://en.wikipedia.org/wiki/Database_normalization

澄清 假设您有一个表名'users'。假设您要存储用户的ID,名字,姓氏和城市。将它们放在单独的表中是没有意义的。但是,假设您想要从网上商店或其他东西存储用户的订单,则无法将其存储在同一个表中。它不仅涉及不同的东西(订单与用户),而且由于您不知道用户将要订购多少订单,因此您需要一个新表。

所以规范化=好,将字段放在单独的表中只是因为你可以=坏。

答案 3 :(得分:0)

最好省去解析字符串的麻烦,这可能会调用更大的函数开销。

此外,您需要所有三个值并不意味着列数也无关紧要。使用3个单独的列,您可以单独查询A,而无需进行昂贵的查询调用来解析和搜索行以获取所需的数据。

答案 4 :(得分:0)

如果varrible的数量始终相同,则应使用3个不同的列,但如果不是,则可以将这些值放在1列中。我通过添加#来实现这一点,类似于#value#,当我需要这些值时,我只使用php函数explode('#',$ sql_val)。

答案 5 :(得分:0)

您可能需要考虑的一件事:您是否需要添加“D”或“E”......列

如果答案是肯定的,那么查找表将有助于将来证明您的数据库。

如果列A,B或C成为可选

,这也适用

答案 6 :(得分:0)

一个有趣的事实是,我可以准确地了解3列解决方案的性能 又称做DB 的标准方式,而我无法对您的解决方案发表意见。为什么?你能正确实施吗?它会没有bug吗?如果您的代码被审核,这样的设计将很容易被拒绝。

要记住的另一件事是代码维护。它常常出现在一个月前写的东西上,并且想到“这个人在想什么!?!”。特别是当你是那个人的时候。