哪种mysql方法更快?

5

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

方法1
我可以将前200个字符保存在一个列中, 其余的字符保存在sql表的第二个列中。

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


3
让我重新表达我们的问题:“伙计们,有人可以为我的需求进行数据库分析调查吗?” ;) - s.webbandit
4个回答

4

把所有内容都存储在一个列中会更加“清晰”,你可以像这样只选择前200个字符

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

1
那生产力呢?每秒调用DB的substring()方法比简单选择一个单元格更快吗? - s.webbandit
“substring”是一个非常快的函数。我怀疑这个简单的函数是否存在性能问题。但我没有尝试过在如此重的负载下使用它。 - juergen d
考虑到谷歌的搜索结果,它会做类似的事情。因此我认为可以使用substring()函数。 - madhu131313

1

这并不重要,但如果您想进行优化,那么方法1更好,只要您将查询限制在该列上(或者只查询您真正需要的这些列),因为在服务器端执行任何substring都需要时间和资源(请求次数...)。方法2更简洁,但是如果您优化时间,则使用方法1。


0

这将归结为两件事之一:

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

另一方面,如果您有两列,则可能会在访问驱动程序时出现瓶颈,该驱动程序将数据取回到您的PHP - 较长的行可能会导致对多行的访问变慢。

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


0

方法二。

首先,数据的重复存储通常是不好的(泄愤)。在这种情况下这是确实如此。

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

第三,现在更新和删除容易受到烦人的不一致性(见#1)的影响。

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

第五,即使您正在搜索前200个字符,也可以对其进行索引,并且检索速度应该是相同的。

第六,您不希望数据库设计限制您的UX-如果您需要更改为500个字符怎么办?您将有很多事情要做。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接