虛擬列分區可以對表達式進行分區,該表達式可能使用來自其他列的數據,并使用這些列進行計算。
虛擬列分區支持所有分區類型。如果查詢條件不是某一個列上的原始數據,而是經過計算過的,又不想添加一個單獨的列來存儲計算過的正確值,可以考慮添加一個虛擬列。
在以下示例的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'));
在上述示例中,列省市定義為從確認號派生的虛擬列。虛擬列不需要任何存儲,虛擬列支持行移動。如果虛擬列在另一個分區中計算出不同的值,則數據庫將一行遷移到另一個分區。
文檔內容是否對您有幫助?