【问题标题】:Which would be faster in retriving data from a mysql database?从 mysql 数据库中检索数据哪个会更快?
【发布时间】:2010-11-11 18:31:50
【问题描述】:

从 mysql 数据库中检索数据哪个更快?数据跨两列拆分,还是单列中相同大小的数据?

编辑:

只是提供一个想法,我有一个问题表格和五个答案。这些答案相当大,每个大约 1500 字。在数据检索速度方面,我应该为每个答案使用一列,还是应该将 5 个答案用分隔符分隔一列,然后使用脚本将它们分开?

【问题讨论】:

  • 在列中存储分隔列表在 99.9% 的情况下都是错误的。

标签: sql database database-design mysql


【解决方案1】:

不要将答案合并到一个单独的列中,无论是否分隔。如果你这样做了,你不仅打破了rule-of-thumb in db design第一范式),你也在为未来的编程世界做好准备。

您还应该考虑到您正在参与过早的优化。也不要那样做。根据我的经验,并且我认为其他人会同意,您应该信任您的 RDBMS 来为您有效地存储和检索数据。您唯一需要做的就是正确设置索引。如果这确实变成了性能问题,那么您可以在那时进行非规范化。

【讨论】:

    【解决方案2】:

    针对您的编辑,您提供的选项都不是针对此问题的“正确”设计。您应该在一个答案表中创建 5 个,每行都有问题的 ID,并且在一列中有一个答案。

    只有当这证明存在性能问题时,您才应考虑其他设计。除非您收集数百万个问题,否则不太可能出现问题。

    【讨论】:

      【解决方案3】:

      如果他们在同一张桌子上,那不会有什么不同。

      访问一行后,从列中查找数据需要很短的时间。

      您应该根据您的数据以及您将如何访问它来做出决定。

      【讨论】:

      • 我的印象是它仍然会有所作为,因为它必须少与第二列的名称进行比较,因此使单列方法更快。微不足道的,是的。但还是更快。
      • 可能是这样,但与行查找所需的时间相比,获取该数据的时间将非常少。
      • 出于性能考虑,人们还应该考虑在事后通过查询(例如,查看或报告的 SP)或通过客户端代码解析出各个答案可能需要什么。跨度>
      【解决方案4】:

      不要依赖猜测和假设。使用您的编码和数据在您的硬件上自行对它进行基准测试。

      【讨论】:

        【解决方案5】:

        我想说的是,您访问和使用信息的方式比它实际存储的方式更相关。

        我可能会说,如果您要独立参考每个答案(例如多项选择答案),请将答案存储在具有以下结构的 3 列表中:

        CREATE TABLE answers (
          question_id INTEGER PRIMARY KEY,
          answer INTEGER,
          answer_text TEXT
        );
        

        对于给定问题中的每个答案,答案类似于 1、2、3、4、.. 会更合适和理智。

        【讨论】:

        • 是的,请以这种方式规范您的结构!
        【解决方案6】:

        一些数据库不索引文本类型的列。因此,如果您将文本列中的列分解为 varchar,and 您已为每一列编制索引,并且您使用的是不为文本列编制索引的数据库,你会得到更好的性能分解它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-18
          • 2017-08-02
          • 2013-03-24
          • 1970-01-01
          • 1970-01-01
          • 2013-04-02
          • 2015-12-03
          相关资源
          最近更新 更多