将几个longtext放入同一个表mysql中是一种很好的做法吗?

时间:2015-04-16 04:09:57

标签: mysql performance longtext

我正在创建一个包含多个longtext行的mysql表。我期待很多用户输入大量文本。我应该将它们分别分成不同的表格,还是将它们放在一张桌子上?我关注速度,当我查询结果时会影响速度,如果我想在未来传输数据怎么样?我正在使用InnoDB,还是应该使用Myisam?

CREATE TABLE MyGuests (
  id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  diet longtext NOT NULL,
  run longtext NOT NULL,
  faith longtext,
  apple longtext
);

1 个答案:

答案 0 :(得分:1)

如果您的查询是SELECT *,则您对此数据库布局的速度主要关注,而页面只使用其中一个字段。 (这是一个非常常见的性能降级程序。)此外,如果您打算在可用文本列表中每页显示多个文本,您可能希望有一个单独的描述列(具有截断版本的完整的文本,如果没有别的),并且只获取那些而不是只获取全文,然后在PHP中截断它。

如果您打算提供搜索功能,您绝对应该使用全文索引来保持您的表现。如果您的MySQL版本是5.6.4或更高版本,则可以使用InnoDB和MyISAM进行全文搜索。否则,只有MyISAM在早期版本中提供。

您还可以在一体化表和每个单独表之间进行第三种选择,这可能是首选方式,假设您最终可能会在未来添加更多文本类型。那就是:

有一个第二个表,其中引用了第一个表的ID,一个列(ENUM将是最有效的,但只要你将其编入索引,实际上是一个边缘问题),表明文本的类型(饮食,运行等) 。),以及包含文本的单个longtext列。

然后,您可以毫不费力地在将来添加更多文本类型,而无需对表格布局(或代码)进行更为戏剧性的编辑,并且只获取特定类型的文本也很简单。结合主条目表(可能还包含一些相关元数据,如作者ID,输入日期等)和文本的索引联接不应成为性能问题。