我在数据库中保存了一些文本,比如 1000 个字符。但我只显示前 200 个字符。
方法 1
我可以将前 200 个字符保存在一列中,其余字符保存在 sql 表的第二列中
方法 2
我可以将所有内容保存在一列中,在显示时我可以查询 200 个字符
我在数据库中保存了一些文本,比如 1000 个字符。但我只显示前 200 个字符。
方法 1
我可以将前 200 个字符保存在一列中,其余字符保存在 sql 表的第二列中
方法 2
我可以将所有内容保存在一列中,在显示时我可以查询 200 个字符
将所有内容存储在 1 列中会更“干净”。你只能像这样选择前 200 个字符
select substring(your_column, 1, 200) as your_column from your_table
这确实无关紧要,但是如果您尝试优化,那么方法1会更好,只要您将查询限制在该列(或者您只查询您真正需要的这些列),因为substring
在服务器端执行任何操作都需要时间和资源(请求次数的倍数......)。方法 2 更清洁,但是您优化了时间,所以方法 1。
这将归结为以下两件事之一:
如果您将整行拉回 PHP,然后只显示前 200 个字符,那么您的网络速度可能会成为拉回数据的瓶颈:
另一方面,如果您有两列,您的驱动器访问可能会遇到瓶颈,它将数据取回您的 PHP - 较长的行可能会导致访问多行的速度较慢。
这将归结为特定于服务器的权衡。这实际上取决于您的服务器的性能。我建议运行一些场景,让你的代码尝试撤回几十万个,看看需要多长时间。
方法2。
首先,数据的重复存储通常是不好的(士气低落)。在这种情况下,这当然是正确的。
其次,写入两个表比一个表需要更长的时间。
第三,您现在已经进行了更新和删除,容易受到恼人的不一致的影响(参见 #1)。
第四,除非您在前 200 个字符中搜索文本,否则两种方法的数据输出将是相同的(只需选择前 200 个字符的子字符串)。
第五,即使你在搜索前 200 个字符,你也可以对它们进行索引,并且检索速度应该是相同的。
第六,您不想要限制您的用户体验的数据库设计——如果您需要更改为 500 个字符怎么办?你会有很多工作要做。
这是数据库设计中不该做什么的一个非常明显的例子。
参考:乔·艾米森回答http://www.quora.com/MySQL/Which-mysql-method-is-fast