0

我的数据库中有两个字段,一个是描述(TEXT),另一个是 short_desc(VARCHAR-200)。

当我显示搜索结果时,我显然使用了 short_desc,当有人点击该项目时,他们会得到完整的描述,长度可能有几千个字符。

这些字段都没有索引,因为我使用 Sphinx 进行搜索。

我的问题是,当我可能使用 SUBSTRING() 来检索缩短的描述时,我需要 short_desc 还是浪费空间?

如果 SUBSTRING 没有太多开销,我觉得它比存储短和长的描述更灵活,浪费更少?

4

2 回答 2

1

从数据库的角度来看,如果您的记录长度已经是几个 KB,那么保留额外 200 个字符的开销是相当小的。

我担心的是将用户界面的奇思妙想与底层数据库结构联系起来。为什么简短的描述正好是 200 个字符?在单词中间打断一个单词怎么办?还是数字中间的数字?你不想在标点符号边界上打断吗?

这里的重点是没有“正确”的答案。如果您有一个简短描述的字段,并且它在数据库中,那么请准备好有人可能想要修改它以使其更漂亮。如果您的用户界面只想获取前 200 个字符,那么请为需要 100 个或 250 个字符的新版本做好准备。

我不认为数据库性能应该是这里的关键问题。子字符串的额外开销可能是更长的字符串读取的一页。对于面向用户的应用程序,这可能并不明显。

于 2013-09-04T11:53:15.840 回答
1

不,一般来说不是(即它不浪费空间)。在所有 MySQL 5 版本中,有:

  • MySQL 从不在条件中使用带有函数的索引(类似于WHERE SUBSTR(X, 1, 2)=Y
  • 您可以在 VARCHAR 列上建立索引。即,如果您将使用短文本 - 您将确定您可以使用它的索引并且将使用该索引。在TEXT建立索引的列上,只有一定的长度才可能。

因此,如果您有很多SELECT查询 - 最好有简短的描述(除了上面写的之外,TEXT字段是单独存储的,因此访问它们可能会导致最严重的问题 - 磁盘操作)。在这种情况下,您将能够创建和使用索引,避免不必要的磁盘读取操作。

于 2013-09-04T11:45:44.900 回答