Schema Tuning Recipes
本文档提供了通过有效的模式设计和基础表选择来优化 StarRocks 查询性能的实用技巧和最佳实践。通过了解不同表模型、键和分布策略如何影响查询执行,您可以显著提高速度和资源效率。使用这些指南在设计模式、选择表模型以及调整 StarRocks 环境以实现高性能分析时做出明智决策。
表模型选择
StarRocks 支持四种表模型:明细表、聚合表、更新表和主键表。所有这些表都是按键排序的。
AGGREGATE KEY:当具有相同 AGGREGATE KEY 的记录导入到 StarRocks 时,新旧记录会被聚合。目前,聚合表支持以下聚合函数:SUM、MIN、MAX 和 REPLACE。聚合表支持提前聚合数据,方便业务报表和多维分析。DUPLICATE KEY:对于明细表,您只需指定排序键。具有相同 DUPLICATE KEY 的记录可以同时存在。适用于不涉及提前聚合数据的分析。UNIQUE KEY:当具有相同 UNIQUE KEY 的记录导入到 StarRocks 时,新记录会覆盖旧记录。更新表类似于具有 REPLACE 函数的聚合表。两者都适用于涉及持续更新的分析。PRIMARY KEY:主键表保证记录的唯一性,并允许您进行实时更新。
CREATE TABLE site_visit
(
siteid INT,
city SMALLINT,
username VARCHAR(32),
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(siteid, city, username)
DISTRIBUTED BY HASH(siteid);
CREATE TABLE session_data
(
visitorid SMALLINT,
sessionid BIGINT,
visittime DATETIME,
city CHAR(20),
province CHAR(20),
ip varchar(32),
browser CHAR(20),
url VARCHAR(1024)
)
DUPLICATE KEY(visitorid, sessionid)
DISTRIBUTED BY HASH(sessionid, visitorid);
CREATE TABLE sales_order
(
orderid BIGINT,
status TINYINT,
username VARCHAR(32),
amount BIGINT DEFAULT '0'
)
UNIQUE KEY(orderid)
DISTRIBUTED BY HASH(orderid);
CREATE TABLE sales_order
(
orderid BIGINT,
status TINYINT,
username VARCHAR(32),
amount BIGINT DEFAULT '0'
)
PRIMARY KEY(orderid)
DISTRIBUTED BY HASH(orderid);
Colocate Table
为了加快查询速度,具有相同分布的表可以使用公共分桶列。在这种情况下,数据可以在本地进行连接,而无需在 join 操作期间在集群间传输。
CREATE TABLE colocate_table
(
visitorid SMALLINT,
sessionid BIGINT,
visittime DATETIME,
city CHAR(20),
province CHAR(20),
ip varchar(32),
browser CHAR(20),
url VARCHAR(1024)
)
DUPLICATE KEY(visitorid, sessionid)
DISTRIBUTED BY HASH(sessionid, visitorid)
PROPERTIES(
"colocate_with" = "group1"
);
有关 colocate join 和副本管理的更多信息,请参见 Colocate join