2

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

我的问题是:

存储在一列中+检索+解析需要更多时间吗?

或者

存储在三个不同的列中并检索它会花费更多的时间和资源吗?

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

4

7 回答 7

0

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...

于 2012-06-18T09:44:23.970 回答
0

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.

于 2012-06-18T09:45:28.760 回答
0

如果变量的数量一直相同,则应使用 3 个不同的列,但如果不是,则可以将这些值放在 1 列中。我通过添加#类似这样的东西来做到这一点#value#,当我想要这些值时,我只使用 php 函数explode ('#',$sql_val)。

于 2012-06-18T09:53:25.867 回答
0

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

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

如果 A、B 或 C 列成为可选列,这也将适用

于 2012-06-18T09:53:28.663 回答
0

一个有趣的事实是,我可以准确地了解 3 列解决方案(也就是执行 DB 的标准方式)的性能,而我无法对您的解决方案发表意见。为什么?你会正确执行它吗?它会没有错误吗?如果您的代码经过审查,这样的设计将很容易被拒绝。

要记住的另一件事是代码维护。经常会看到一个月前写的东西,然后想“这家伙在想什么!?!”。尤其是当你是那个人的时候。

于 2014-02-17T08:03:09.850 回答
0

将所有变量存储在一列中可能会稍微快一些,因为 MySQL 只有一个表要查询,而不是三个。但是,您是否应该拆分表的问题与您的性能无关,而与您的数据模型的规范化有关。有关更多信息,请参阅http://en.wikipedia.org/wiki/Database_normalization

为了澄清假设您有一个表名“用户”。假设您要存储用户的 id、名字、姓氏和城市。将它们放在单独的表中是没有意义的。但是,假设您想存储来自网上商店或其他东西的用户订单,您不能将其存储在同一个表中。它不仅涉及不同的东西(订单与用户),而且由于您不知道用户将下多少订单,因此您需要一个新表。

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

于 2012-06-18T09:47:39.150 回答
0

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

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

于 2012-06-18T09:51:43.593 回答