假设我想在SQL表中存储值a,b,c 我必须通过像abc这样的分隔符存储在SQL DB的一个单独列中的一个选项(考虑a,b,c值不包含' - ')然后在检索它之后通过PHP解析它。另一个选择是我应该将所有三个值存储在不同的列中。
我的问题是:
存储在一列+检索+解析会花费更多时间吗?
或
存储在三个不同的列中并检索它将需要更多 时间和资源?
注意:在任何时候我都需要a,b,c的所有三个值,即如果我正在检索' a'然后我也需要检索b和c。
答案 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吗?如果您的代码被审核,这样的设计将很容易被拒绝。
要记住的另一件事是代码维护。它常常出现在一个月前写的东西上,并且想到“这个人在想什么!?!”。特别是当你是那个人的时候。