gpt4 book ai didi

mysql - 将文本字段保留在 MySql 表行中还是在单独的表中并加入会更好吗?

转载 作者:可可西里 更新时间:2023-11-01 06:38:35 25 4
gpt4 key购买 nike

我知道在 MySql 表中使用文本类型字段时,数据不会以内联方式存储,而只会在行中存储一个“指针”。我只想不经常检索文本字段,所以最好是将它保存在同一个表中但从查询结果中忽略它,还是将它保存在一个单独的表中并在我想阅读时连接到该表?

这个表可能有数十亿行,被分区并且有大的(100k -> 1Mb)文本字段值。

最佳答案

至少可以说,10 亿行具有 100k 的字段是很大的。这就达到了 100 TB 的数据(使用美国对“太字节”的定义)。根据documentation :

The InnoDB storage engine maintains InnoDB tables within a tablespace that can be created from several files. This enables a table to exceed the maximum individual file size. The tablespace can include raw disk partitions, which permits extremely large tables. The maximum tablespace size is 64TB.

换句话说,您可能遇到比性能更大的问题。您可能会将表分布在多个分区中。

如果您只是偶尔检索文本并且从不使用它进行搜索,我建议您将它存储在一个单独的表中。这样,您可以自定义该表以访问这些记录。您将拥有一个用于引用的主键,所有引用都将通过该 ID。

如果您使用文本进行搜索,特别是与“固定”数据结合的搜索,那么我的架构偏好是将其包含在基表中以方便跨字段搜索。

然而,即使有这种偏好,将它放在不同的表中可能更安全。例如,MySQL 实例化子查询。将 * 用于子查询是非常典型的。考虑一个简单的案例:查询以获取按用户 ID 排序的 1000 条最新记录:

select t.*
from (select t.*
from t
order by createddate
limit 1000
) t
order by userid

t.* 的使用意味着文本列也将被检索。因此,可能需要几分之一秒的查询(使用索引)必须读取和写入 1000*100k = 100 MB 的数据(至少)。这可能需要更长的时间。

总而言之,我建议将文本列放在一个表中,在该表中它经常与其他列一起被搜索——例如,在科学论文摘要的数据库中。对于非常大的数据,我会把它放在一个单独的字段中,这样在极端情况下我可以更好地管理存储。

关于mysql - 将文本字段保留在 MySql 表行中还是在单独的表中并加入会更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17449864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com