MySQL 5.5:以下哪一项是innodb中text / varchar字段的更好存储?

时间:2013-02-21 07:40:17

标签: mysql innodb

要求:

  

Page#1 - >显示用户和最新10篇博文的1-2行预览

     

第2页 - >显示带有全文的单个博文。

方法1:

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

方法2:

 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中的表数据量,从而影响查询的读取性能?

2 个答案:

答案 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都同步(也许你可以将它作为一个功能)