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