假设我想将值 a,b,c 存储在 SQL 表中一个选项我必须通过 abc 之类的分隔符存储在 SQL DB 的单个列中(考虑到 a,b,c 值不包含 '-' )然后在检索到它后由 PHP 解析它。另一种选择是我应该将所有三个值存储在不同的列中。
我的问题是:
存储在一列中+检索+解析需要更多时间吗?
或者
存储在三个不同的列中并检索它会花费更多的时间和资源吗?
注意:在任何时候,我都需要 a、b、c 的所有三个值,即如果我要检索 'a',那么我也需要检索 b 和 c。
假设我想将值 a,b,c 存储在 SQL 表中一个选项我必须通过 abc 之类的分隔符存储在 SQL DB 的单个列中(考虑到 a,b,c 值不包含 '-' )然后在检索到它后由 PHP 解析它。另一种选择是我应该将所有三个值存储在不同的列中。
我的问题是:
存储在一列中+检索+解析需要更多时间吗?
或者
存储在三个不同的列中并检索它会花费更多的时间和资源吗?
注意:在任何时候,我都需要 a、b、c 的所有三个值,即如果我要检索 'a',那么我也需要检索 b 和 c。
You should store them in 3 separate columns. DB are made for this and you should not be afraid at all of performance issue :)
That will save you the pain of parsing after selecting the data and you will be able to use all the possibilites of a database : count occurences of each value...
I think, it would be right to use three columns as index because MySQL stores an index in B-tree structure, which is more quicker than retrieving and parsing with PHP. More about indexing.
如果变量的数量一直相同,则应使用 3 个不同的列,但如果不是,则可以将这些值放在 1 列中。我通过添加#
类似这样的东西来做到这一点#value#
,当我想要这些值时,我只使用 php 函数explode ('#',$sql_val)。
您可能需要考虑的一件事:您是否需要添加“D”或“E”...列?
如果答案是肯定的,或者可能,那么查找表将有助于将来证明您的数据库。
如果 A、B 或 C 列成为可选列,这也将适用
一个有趣的事实是,我可以准确地了解 3 列解决方案(也就是执行 DB 的标准方式)的性能,而我无法对您的解决方案发表意见。为什么?你会正确执行它吗?它会没有错误吗?如果您的代码经过审查,这样的设计将很容易被拒绝。
要记住的另一件事是代码维护。经常会看到一个月前写的东西,然后想“这家伙在想什么!?!”。尤其是当你是那个人的时候。
将所有变量存储在一列中可能会稍微快一些,因为 MySQL 只有一个表要查询,而不是三个。但是,您是否应该拆分表的问题与您的性能无关,而与您的数据模型的规范化有关。有关更多信息,请参阅http://en.wikipedia.org/wiki/Database_normalization。
为了澄清假设您有一个表名“用户”。假设您要存储用户的 id、名字、姓氏和城市。将它们放在单独的表中是没有意义的。但是,假设您想存储来自网上商店或其他东西的用户订单,您不能将其存储在同一个表中。它不仅涉及不同的东西(订单与用户),而且由于您不知道用户将下多少订单,因此您需要一个新表。
所以规范化=好,将字段放在单独的表中只是因为你可以=不好。
最好省去解析字符串的麻烦,这也可能会调用更大的函数开销。
此外,您需要所有三个值这一事实并不意味着列数也无关紧要。使用 3 个单独的列,您可以单独查询 A,而无需进行昂贵的查询调用来解析和搜索所需数据的行。