列族是表中的一组列,它们作为单个键值对存储在底层键值存储中。列族减少了键值存储中的键的数量,从而提高了INSERT
,UPDATE
,DELETE
操作的性能。
本页解释了hubble如何将列组织成系列。
以下介绍默认行为和手动操作的情况,鼓励手动操作。
创建表时,所有列都存储为单个列族。
在大多数情况下,这种默认方法可确保高效的键值存储和性能。然而,当频繁更新的列与很少更新的列组合在一起时,很少更新的列仍然会在每次更新时被重写。特别是当不频繁更新的列很多时,将它们拆分成一个不同的系列会更高效。也就是说将频繁更新的列与不频繁更新的列放在不同的列族中。
要在创建表时手动分配列族,请使用FAMILY
关键字。
假定有一张基础的客户信息表,通常情况下姓名和身份证号是不变的,工作地址会变动,这样可以分为两个列族
create table cust (
id INT PRIMARY KEY,
name string,
card_no string,
address string,
family f1 (id, name,card_no),
family f2 (address)
);
show create cust;
table_name | create_statement
-------------+-------------------------------------------------
cust | CREATE TABLE public.cust (
| id INT8 NOT NULL,
| name STRING NULL,
| card_no STRING NULL,
| address STRING NULL,
| CONSTRAINT "primary" PRIMARY KEY (id ASC),
| FAMILY f1 (id, name, card_no),
| FAMILY f2 (address)
| )
(1 row)
当使用ALTER TABLE .. ADD COLUMN
语句向表中添加列时,可以将该列分配给新的或现有的列族。
CREATE FAMILY
关键字将新列分配给新列族alter table cust add column sex string create family f3;
CREATE FAMILY
关键字将新列分配给现有列族alter table cust add column tell_no string family f1;
如果一个列被添加到表中并且没有指定族,它将被默认添加到第一个列族中。