要求:
Page#1 - >显示用户和最新10篇博文的1-2行预览
第2页 - >显示带有全文的单个博文。
MySQL table -> userid -> varchar 50
post_id -> integer
post_title -> varchar 100
post_description -> varchar 10000
第1页,从blog_table中选择user_id,post_title,post_description。 post_description的子字符串用于在列表中显示预览。
第2页,选择user_id,post_title,post_description,其中post_id = N
MySQL table -> userid -> varchar 50
post_id -> integer
post_title -> varchar 100
post_brief -> varchar 250
post_description -> text
第1页,从blog_table中选择user_id,post_title,post_brief。
第2页,选择user_id,post_title,post_description,其中post_id = N
是否存储两列,一个简短的varchar和一个full作为文本(因为它访问文件系统,并且只在需要时才应该查询),是否值得获得性能优势?
因为方法2只存储指向行中文本的指针,而方法1将在行中存储完整的varchar 10K字符串。它是否会影响可驻留在RAM中的表数据量,从而影响查询的读取性能?
答案 0 :(得分:2)
方法2看起来更好但是如果你存储HTML,那么post_brief也可以是TEXT列,如果它是纯文本你可以将所有内容存储在一列中并使用
SELECT user_id, post_title, LEFT(post_description,255) AS post_brief FROM blog_table.
考虑MySQL 5.6,速度要快得多,你可以在InnoDB中使用FULLTEXT索引,所以如果搜索帖子会有很多帮助
答案 1 :(得分:1)
选项2对我来说也很好看。由于博客文章很庞大,在该列上应用函数也需要时间。
如果你问我,post_description的数据类型应该是blob/text。虽然blob列不支持搜索,但这将是更好的选择。
只有两列的缺点是,你必须确保desc和brief都同步(也许你可以将它作为一个功能)