如果只选择相关列,创建 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 列。
我正在使用 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 列。