mysql - 将不同大小的文本存储在不同的mysql表中是否有效?

标签 mysql text

我正在构建一个将存储大量文本的数据库系统。

文本将存储在一个包含 id 列和 varchar/text 列的表中。

我想知道使用一个使用大 varchar 的单个表或使用多个表(每个表使用不同的文本类型)是否会更有效。

多表选项将包含多个不同的表,每个表使用不同类型的文本(tinytext、text 等),系统将根据文本的长度将文本存储在最合适的表中。

我既关心速度又关心存储空间,并且想要一个平衡两者的解决方案。

编辑 -

不会搜索文本表,但可以连接它(通常会确定一个 ID 号,然后访问单行)。

大小通常会小于文本,但有些会足够大以需要中等文本。我怀疑是否需要长文本。

最佳答案

保持简单!说真的。

除非您的绝大多数文本项都不超过 255 个字符,否则只需使用 TEXTLONGTEXT。将时间花在文本上做有趣的事情,而不是摆弄复杂的数据结构。立即完成您的项目;稍后优化。

磁盘驱动器和 RAM 的价格比现在便宜得多。

如果您的应用要求绝对需要您使用 varchar 数据(因为其简洁性和可搜索性)而不是文本数据,您可以执行以下操作。

创建一个 article 表,每篇文本文章一行。它将包含管理文章所需的所有内容,包括标题、作者和 article_id

创建第二个表,名称类似于article_text。它可能有四列。

  article_id    foreign key to article table.
  language      a language code, if you happen to store translations of articles
  ordinal       a sequence number
  textfrag    varchar(255)  part of the text.

将每篇文章的文本存储在一系列具有升序 ordinal 值的 article_text 行中。每个 textfrag 最多可容纳 255 个字符的文本。要检索文章的文本,您将使用这样的查询。

 SELECT textfrag 
   FROM article_text
  WHERE language = 'en_US'   /* or whatever */
    AND article_id = 23456   /* or whatever */
  ORDER BY ordinal

然后,您将获取一堆行,连接 textfrag 项的内容,这样您的文章就没有有效长度限制。如果您创建一个包含所有字段的索引,那么您的检索时间将会非常快,因为所有检索都将来自该索引。

  (article_id, language, ordinal, textfrag)

如果您尽最大努力将文本在单词边界处分割成片段,并且使用 MyISAM,并且使用 FULLTEXT 索引,那么您将获得一个非常有效的全文搜索系统。

关于mysql - 将不同大小的文本存储在不同的mysql表中是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901286/

相关文章:

mysql - Symfony - 来自 ArrayColletion 的项目被删除,但仍显示在列表中

php - 使用ajax在php中删除函数

html - 以 HTML 格式在图片上可见的文本

mysql - SQL 仅选择列上具有最大值的行

mysql - 连接两个表并更新列值

MySQL-从另一个表插入与常量合并的数据

Python - 根据内容从输入文件中删除某些行

C++ 文本冒险游戏 - 将单词变为大写

c++ - 使用 C++ 或任何 Windows 脚本语言格式化文本数据

java - 在 Java 中从文本文件创建数据结构