0

我正在创建一个包含几个长文本行的 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
);
4

1 回答 1

1

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

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

您还可以在多合一表格和单独表格之间进行第三种选择,这可能是选择的方式,假设您最终可能会添加更多的文本类型。那是:

有第二个表引用第一个表的 ID,一列(ENUM 将是最有效的,但只要你索引它就真的是一个边际问题)指示文本类型(饮食、跑步等),和一个包含文本的长文本列。

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

于 2015-04-17T07:40:23.203 回答