Doris优化的思考

1. 建表要有分区、分桶键,分区建议是按照天分区,分桶建议是离散度大的字段(如用户id,订单编号等)

还有设置合理的key值,查询经常用到的字段,放到key值里(前缀索引)

查询的时候,按照最左原则,先带上分区键和前缀索引键。

2. 如果有频繁的聚合操作,并且耗费时间,可以单独建立一个物化视图(异步构建,不耽误插入的时间),然后搞个定时任务,增量构建物化视图。

CREATE MATERIALIZED VIEW mv_city_daily_sales AS
SELECT
    city_code,
    sold_date,
    SUM(sold_price) AS total_sales,
    COUNT(*) AS sales_count
FROM sales_records
GROUP BY city_code, sold_date;

当用户再次执行那个高频查询时,Doris 会自动识别到 mv_city_daily_sales 这个物化视图已经包含了 city_codesold_date 和预计算好的 SUM(sold_price),于是会将查询直接路由到物化视图上,而无需扫描全量的 sales_records 表

3. bitmap索引

      Doris的bitmap索引仅支持在单列上创建,并且只支持定长类型的字段查询,不支持text或者string类型的字段查询。bitmap索引适合低基数列查询场景,建议在100到100000之间,如职业、地市等。基数太高,bitmap索引则没有明显优势;基数太低,bitmap索引空间效率和性能会大大降低。

      对于特定类型的查询,例如:count、or、and等逻辑操作,只需要进行位运算,如类似select count(*) from table where city='beijing' and job='teacher' 这种多个条件组合的查询场景,如果在每个查询条件列上都建立bitmap索引,则可以进行高效的位运算,精确定位到需要的数据。筛选出的结果集越小,bitmap索引的优势越明显。

 

posted @ 2025-11-19 15:39  技术虫  阅读(20)  评论(0)    收藏  举报