拆分表以将经常访问的数据与很少访问的数据分开是不是有任何意义?

Posted

技术标签:

【中文标题】拆分表以将经常访问的数据与很少访问的数据分开是不是有任何意义?【英文标题】:Is there any sense in splitting tables apart to separate often accessed data from rarely accessed data?拆分表以将经常访问的数据与很少访问的数据分开是否有任何意义? 【发布时间】:2012-03-19 08:00:02 【问题描述】:

假设我有一个包含 60 奇数列的表,但 99% 的时间我只选择其中的 3 或 4 个。将表拆分为一个 4 列表和一个 56 列表,行之间具有 1 对 1 的对应关系是否有意义。这能救我什么吗?从 4 列的表中提取 1000 个 4 列的行与从 60 列的表中提取 1000 个 4 列的行之间是否存在性能差异?

我正在使用“mysql 14.14 Distrib 5.1.49 for debian-linux-gnu”

【问题讨论】:

这将是一件有趣的事情。随意编写性能测量脚本。 ;-) 是 MyISAM 还是 InnoDB,有多少表被索引? 所有这些因素都可以很容易地改变,我并没有被其中任何一个所束缚。我正在使用 InnoDB、一个主索引、一个唯一索引和几个普通索引。 【参考方案1】:

在其他 DBMS 中,您可以通过垂直分区来实现这一点。拥有这样的功能,您可以将表垂直拆分为多个分区 - 意味着按列拆分。

这比手动操作更有优势。它不会破坏您的表设计,并且对于为这些表编写 SQL 的程序员来说是透明的。 工作是在较低的级别上完成的,这很好。

如果您真的需要额外的性能,我会等待。也许 MySQL 总有一天会支持垂直分区。只要您没有必要,就不要为此破坏您的表格布局。

【讨论】:

【参考方案2】:

这取决于您的数据库性能。如果你的缓存命中率很高,所以你的表被缓存了,那么拆分表就没有意义了。只有对于表中的许多选择,数据库需要从磁盘读取数据,那么这可能是一个好主意。

【讨论】:

以上是关于拆分表以将经常访问的数据与很少访问的数据分开是不是有任何意义?的主要内容,如果未能解决你的问题,请参考以下文章

访问数据库查询以将由“,”分隔的列拆分为多行

mysql数据库分库分表shardingjdbc

将数据访问层与服务层分开是否很好[关闭]

MYSQL性能优化

记录以将文件与在不同进程中运行的类实例分开

Excel 365 - 从现有表创建新表以将每月数据标准化为单独的行