【问题标题】:How many fields are too many when querying MySQL?查询MySQL时多少字段太多?
【发布时间】:2011-03-26 10:34:06
【问题描述】:

我读过很多次,我们必须避免在查询 MySQL(或任何数据库)时读取太多字段...只需查询您需要的字段。

但是我有一个项目,其中一个表的每条记录/行有 100 个字段。

问题是,每次我查询数据库时,我都需要所有字段在查询完成后进行进一步计算等。

我最终将有大约 200 个用户,他们将使用相同的查询/表。 目前我在3台PC上做了一些连续测试,不断查询数据库,完全没有性能问题,所有数据都在几分之一秒内查询完毕。 还要注意查询是多次相同的(所有用户查询相同的东西),所以查询缓存被命中了很多..

但我担心,当链接和项目的所有用户 (+200) 都投入生产时,我会开始遇到性能问题。

所以...问题是,100 个字段是否太多而无法查询?

可以使用 SELECT * ... 还是 SELECT field1,field2,field3... 等会更快?

我不知道如何“模拟”200 个用户同时查询...有什么想法吗?

谢谢

【问题讨论】:

  • "100 个字段是否太多无法查询?"您已经对其进行了测试,就您而言,答案是。 “SELECT field1,field2,field3...等会更快吗?” * 暗示的查找和解析所有字段(如果单独提及)都需要时间,但与实际查询相比,这没什么。
  • 感谢 cmets。我不确定您对“* 意味着解析...”的意思。您是说最好使用 *(在这种情况下)还是让查询列出每个单独的字段更好?

标签: mysql field


【解决方案1】:

一些想法可以在here找到。

如果您有 200 个用户,那么您可能不会遭受太多痛苦,除非他们决定采取一致行动。但是,我可能会问我是否真的需要 100 个字段,或者数据库是否可以标准化。如果这就是你需要的,那就是你需要的。

【讨论】:

  • +1 包含 100 个字段的表格散发出可疑的代码气味。 :-)
  • 相信我,我已经考虑减少字段的数量,但这是不可能的。虽然不是所有的记录都使用全部 100 个字段,大多数使用在 50-60 之间,有的 75+,少数是满 100。我对 mysql 没有太多经验,但我确实考虑过,不知道如何使其少于 100 个字段
  • 可能是使用 100 个字段的正当理由,但这肯定很不寻常,所以我会持怀疑态度。是否有任何相关的字段集,通常一起提供或大部分为 NULL?如果是这样,将它们分解成自己的实体可能是个好主意。
  • 是的,有很多字段是NULL,但我不知道什么时候会发生这种情况。有时记录使用 50 个字段(其余为 NULL),有时记录使用 75 个字段,而 25 个字段为 NULL……这取决于。您能否详细说明“将它们分解成自己的实体”?
  • 好吧,如果某些列代表相关值,并且它们要么全是NULL,要么全是NOT NULL,这意味着它们有自己的含义。举个简单的例子,如果你有 address1address2address3postcode,它们显然代表了单个实体的一部分,address,可以有意义地放入单独的表中。从用户表到地址表存在一对零或一的关系,因此当没有地址时,用户表中只有一个 NULL 列,并且在地址表。
【解决方案2】:

我谦虚地建议您需要研究一下数据库规范化。您可以分割该记录。

http://en.wikipedia.org/wiki/Database_normalization

http://databases.about.com/od/specificproducts/a/normalization.htm

特别是 MySQL。

http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

在生产代码中使用“select *”也被认为是错误的形式。就个人而言,如果我真的需要每个领域,我都会使用它。 YMMV。

HTH

根据您无法打破记录的评论:研究 SQL“联接”和“子查询”。你会爱上他们的。 :-)

【讨论】:

  • 如果您需要每个字段,SELECT * 仍然是个问题,因为下次您向数据库添加内容时,您必须找到所有这些地方,而不是只添加您知道的地方的新列它将被使用。
  • 感谢链接和 cmets。但是如果我将记录分成 4 个不同的表,但我需要所有字段进行计算,我仍然需要查询 4 ​​个表中的每一个上的所有 25 个字段才能获得我需要的所有数据,对吗?跨度>
  • @griseldas,请参阅上面关于连接和子查询的评论。我必须指出,我理解务实的基于现实的约束。我不是“正常化纳粹”。 :-) 也不是代码或评论纳粹。祝你好运。
猜你喜欢
  • 2011-07-09
  • 2011-01-19
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2018-01-08
  • 2012-09-03
  • 2018-08-30
相关资源
最近更新 更多