【问题标题】:Which mysql method is fast?哪个mysql方法快?
【发布时间】:2012-09-03 12:13:00
【问题描述】:

我在数据库中保存了一些文本,比如 1000 个字符。 但我只显示前 200 个字符。

方法一
我可以在一列中保存前 200 个字符 剩下的在sql表的第二列

方法二
我可以将所有内容保存在一列中,并且在显示时我可以 查询 200 个字符

【问题讨论】:

  • 让我重新表述我们的问题:Guys, can somebody make profiling research on database for my needs? ;)

标签: mysql query-optimization


【解决方案1】:

将所有内容存储在 1 列中会更“干净”。而且你只能像这样选择前200个字符

select substring(your_column, 1, 200) as your_column from your_table

【讨论】:

  • 那么生产力呢?在每秒 10 000 个请求内调用 DB substring() 方法会比简单的选择一个单元格更快吗?
  • substring 是一个非常快的函数。我怀疑这个简单的功能存在性能问题。但是我没有尝试过这么重的负载。
  • 考虑谷歌搜索结果,它做了这样的事情。所以我认为 substring() 可以使用
【解决方案2】:

这确实无关紧要,但是如果您尝试优化,那么方法1更好,只要您将查询限制在该列(或者您只查询您真正需要的这些列),因为对任何substring服务器端需要时间和资源(请求的次数......)。方法 2 更干净,但您优化了时间,所以方法 1。

【讨论】:

    【解决方案3】:

    这将归结为以下两件事之一:

    如果您将整行拉回 PHP,然后只显示前 200 个字符,那么您的网络速度可能会成为拉回数据的瓶颈:

    另一方面,如果您有两列,您的驱动器访问可能会遇到瓶颈,将数据提取回您的 PHP - 较长的行可能会导致访问多行的速度变慢。

    这将归结为特定于服务器的权衡。这实际上取决于您的服务器的性能。我建议运行一些场景,让您的代码尝试撤回几十万个,看看需要多长时间。

    【讨论】:

      【解决方案4】:

      方法二。

      首先,重复存储数据通常很糟糕(士气低落)。在这种情况下,这当然是正确的。

      其次,写入两个表比一个表需要更长的时间。

      第三,您现在已经进行了更新和删除,容易受到恼人的不一致的影响(参见 #1)。

      第四,除非您在前 200 个字符中搜索文本,否则两种方法的数据输出将是相同的(只需选择前 200 个字符的子字符串)。

      第五,即使搜索前 200 个字符,也可以对它们进行索引,并且检索速度应该相同。

      第六,您不希望数据库设计限制您的用户体验——如果您需要更改为 500 个字符怎么办?你会有很多工作要做。

      这是数据库设计中不该做什么的一个非常明显的例子。

      参考:由 Joe Emison 回答 http://www.quora.com/MySQL/Which-mysql-method-is-fast

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-25
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 2021-11-15
        • 1970-01-01
        • 2014-04-28
        相关资源
        最近更新 更多