文档

何时选择虚拟列分区

更新时间:

虚拟列分区可以对表达式进行分区,该表达式可能使用来自其他列的数据,并使用这些列进行计算。

虚拟列分区支持所有分区类型。如果查询条件不是某一个列上的原始数据,而是经过计算过的,又不想添加一个单独的列来存储计算过的正确值,可以考虑添加一个虚拟列。

在以下示例的sales表中,客户的确认号包含两个字符的省市名称,作为取车的地点,租车分析通常评估地区模式,因此可以按照省市划分:

CREATE TABLE `sales` (
  `id` int(11) NOT NULL,
  `customer_id` int(11) NOT NULL,
  `confirmation_number` varchar(12) NOT NULL,
  `order_id` int(11) DEFAULT NULL,
  `order_type` varchar(10) DEFAULT NULL,
  `start_date` date NOT NULL,
  `end_date` date DEFAULT NULL,
  `province` varchar(12) GENERATED ALWAYS AS (substr(`confirmation_number`,9,2)) VIRTUAL
) ENGINE=InnoDB
PARTITION BY LIST COLUMNS(province)
SUBPARTITION BY HASH (`customer_id`)
SUBPARTITIONS 16
(PARTITION p_cn_north VALUES IN ('BJ','TJ','HB','NMG'),
 PARTITION p_cn_south VALUES IN ('GD','GX','HN'),
 PARTITION p_cn_east VALUES IN ('SH','ZJ','JS'));

在上述示例中,列省市定义为从确认号派生的虚拟列。虚拟列不需要任何存储,虚拟列支持行移动。如果虚拟列在另一个分区中计算出不同的值,则数据库将一行迁移到另一个分区。

  • 本页导读 (0)
文档反馈