我将一些文本保存在数据库中,比如说1000个字符。 但是我只显示前200个字符。
方法1
我可以将前200个字符保存在一个列中,
其余的字符保存在sql表的第二个列中。
方法2
我可以将所有内容保存在一个列中,在显示时查询前200个字符。
我将一些文本保存在数据库中,比如说1000个字符。 但是我只显示前200个字符。
方法1
我可以将前200个字符保存在一个列中,
其余的字符保存在sql表的第二个列中。
方法2
我可以将所有内容保存在一个列中,在显示时查询前200个字符。
把所有内容都存储在一个列中会更加“清晰”,你可以像这样只选择前200个字符
select substring(your_column, 1, 200) as your_column from your_table
substring()
方法比简单选择一个单元格更快吗? - s.webbandit这并不重要,但如果您想进行优化,那么方法1更好,只要您将查询限制在该列上(或者只查询您真正需要的这些列),因为在服务器端执行任何substring
都需要时间和资源(请求次数...)。方法2更简洁,但是如果您优化时间,则使用方法1。
这将归结为两件事之一:
如果您将整行数据拉回到PHP,然后仅显示前200个字符,则网络速度可能成为拉取数据的瓶颈:
另一方面,如果您有两列,则可能会在访问驱动程序时出现瓶颈,该驱动程序将数据取回到您的PHP - 较长的行可能会导致对多行的访问变慢。
这将归结为特定于服务器的权衡。这实际上取决于您的服务器性能如何。我建议运行一些场景,让您的代码尝试拉回每个数百万以查看需要多长时间。
方法二。
首先,数据的重复存储通常是不好的(泄愤)。在这种情况下这是确实如此。
其次,写入两个表会比写入一个表需要更长的时间。
第三,现在更新和删除容易受到烦人的不一致性(见#1)的影响。
第四,除非您正在为文本搜索前200个字符,否则从两种方法中获取数据将是相同的(只需选择第一个200个字符的子字符串)。
第五,即使您正在搜索前200个字符,也可以对其进行索引,并且检索速度应该是相同的。
第六,您不希望数据库设计限制您的UX-如果您需要更改为500个字符怎么办?您将有很多事情要做。
这是数据库设计中不应该做什么的非常明显的案例。
参考:由Joe Emison回答 http://www.quora.com/MySQL/Which-mysql-method-is-fast