如果只选择相关列,创建 table 的垂直分区是否有好处?

Is there a benefit in creating a vertical partition of a table if only relevant columns are being selected anyway?

我正在使用 MySQL 5.6。我有一些表格,每个表格都有 15-20 列以上。

但是,我在每个查询中只注意 select 相关列。

创建这些表的垂直分区是否还有一些好处(例如:性能方面)?

我假设某种垂直分区的手动实现。 documentation 很清楚:

MySQL 5.6 does not support vertical partitioning, in which different columns of a table are assigned to different physical partitions. There are not at this time any plans to introduce vertical partitioning into MySQL 5.6.

当您自己实施时,您实际上是在创建多个 table,它们具有相同的主键但不同的列集。这在某些情况下很有用:

  • 几乎没有数据修改(因为这需要弄清楚哪些分区有列并且还需要大量锁定)。
  • 有少数列在没有其他列的情况下经常被访问。
  • 或者,许多行可能缺少某些列的值(因此分区 table 根本不包含这些行)。

一般来说,这在不提供本机支持的数据库中工作量太大。它可能有用的一种情况是存在很少访问的宽 text/blob 列。将它们放在单独的 table 中可以提高查询效率,因为当列本身未被使用时,不从这些列中读取数据。

因此,有些情况下这种方法很有用。这是一个相当复杂的优化,在典型的 table.

上不太可能需要 20-25 列。