Doris ROLLUP物化索引表
在 Apache Doris 中,ROLLUP 是一种用于数据聚合的 SQL 操作,它可以在不同的数据模型中使用,以提高查询效率。以下是一些使用 ROLLUP 的示例:
- Aggregate 和 Unique 模型中的 ROLLUP:
- 例如,如果你有一个表
example_site_visit2,并且想要获取每个用户的总消费,你可以创建一个ROLLUP表,只包含user_id和cost字段。这样,当你执行GROUP BY user_id的查询时,Doris 会自动使用这个ROLLUP表,从而减少需要扫描的数据量。
- Duplicate 模型中的 ROLLUP:
- 在 Duplicate 模型中,
ROLLUP可以调整列顺序以匹配前缀索引,从而提高查询效率。例如,你可以创建一个ROLLUP表,将age和user_id的顺序调换,这样在执行特定查询时,Doris 会优先选择这个ROLLUP表,因为它的前缀索引匹配度更高。
- ROLLUP 的创建和使用:
- 你可以使用
ALTER TABLE语句来添加或删除ROLLUP。例如,添加一个ROLLUP:
ALTER TABLE example_site_visit2 ADD ROLLUP rollup_cost_userid(user_id, cost);- 查询时,Doris 会根据查询条件自动决定是否使用
ROLLUP。例如,查询特定用户的消费总额:
SELECT user_id, SUM(cost) FROM example_site_visit2 GROUP BY user_id;- 这个查询可能会使用到之前创建的
ROLLUP表。
- 查看 ROLLUP 状态:
- 你可以使用
SHOW ALTER TABLE ROLLUP;命令来查看ROLLUP的创建状态,以确保它们已经完成并且可以使用。(确保创建rollup时base表中有数据)
- ROLLUP 的注意事项:
-
ROLLUP的数据是独立物理存储的,创建的ROLLUP越多,占用的磁盘空间也就越大。 -
ROLLUP的数据更新与 Base 表是完全同步的。 - 查询能否命中
ROLLUP的一个必要条件是,查询所涉及的所有列都存在于该ROLLUP的列中。(where select)
- 聚合查询示例:
- 假设你有一个销售数据表,你可以创建一个
ROLLUP来获取每个城市的销售总额:
ALTER TABLE sales ADD ROLLUP rollup_city(sale_date, prod_name, SUM(sale_nums));- 然后执行查询:
SELECT sale_date, prod_name, SUM(sale_nums) FROM sales GROUP BY sale_date, prod_name;- 这个查询可能会使用到
ROLLUP表,以提高查询效率。










