我的数据库中有两个字段,一个是描述(TEXT),另一个是 short_desc(VARCHAR-200)。
当我显示搜索结果时,我显然使用了 short_desc,当有人点击该项目时,他们会得到完整的描述,长度可能有几千个字符。
这些字段都没有索引,因为我使用 Sphinx 进行搜索。
我的问题是,当我可能使用 SUBSTRING() 来检索缩短的描述时,我需要 short_desc 还是浪费空间?
如果 SUBSTRING 没有太多开销,我觉得它比存储短和长的描述更灵活,浪费更少?
我的数据库中有两个字段,一个是描述(TEXT),另一个是 short_desc(VARCHAR-200)。
当我显示搜索结果时,我显然使用了 short_desc,当有人点击该项目时,他们会得到完整的描述,长度可能有几千个字符。
这些字段都没有索引,因为我使用 Sphinx 进行搜索。
我的问题是,当我可能使用 SUBSTRING() 来检索缩短的描述时,我需要 short_desc 还是浪费空间?
如果 SUBSTRING 没有太多开销,我觉得它比存储短和长的描述更灵活,浪费更少?
从数据库的角度来看,如果您的记录长度已经是几个 KB,那么保留额外 200 个字符的开销是相当小的。
我担心的是将用户界面的奇思妙想与底层数据库结构联系起来。为什么简短的描述正好是 200 个字符?在单词中间打断一个单词怎么办?还是数字中间的数字?你不想在标点符号边界上打断吗?
这里的重点是没有“正确”的答案。如果您有一个简短描述的字段,并且它在数据库中,那么请准备好有人可能想要修改它以使其更漂亮。如果您的用户界面只想获取前 200 个字符,那么请为需要 100 个或 250 个字符的新版本做好准备。
我不认为数据库性能应该是这里的关键问题。子字符串的额外开销可能是更长的字符串读取的一页。对于面向用户的应用程序,这可能并不明显。
不,一般来说不是(即它不浪费空间)。在所有 MySQL 5 版本中,有:
WHERE SUBSTR(X, 1, 2)=Y
)TEXT
建立索引的列上,只有一定的长度才可能。因此,如果您有很多SELECT
查询 - 最好有简短的描述(除了上面写的之外,TEXT
字段是单独存储的,因此访问它们可能会导致最严重的问题 - 磁盘操作)。在这种情况下,您将能够创建和使用索引,避免不必要的磁盘读取操作。