查询优化

一、建表
1.1 Doris 支持 Duplicate、Unique、Aggregate 三种表模型,这几种表模型的查询性能,由好到差依次为:Duplicate > MOW > MOR == Aggregate。
1.2 分桶列:选择高基数的列,避免数据倾斜(如果一列不够,可以选择多列,这样可以把数据更好的打散)
1.3 KEY列:频繁使用的等值或范围查询(等于,大于小于,in)列定义为 Key 列,
1.4 字段类型:定长比变长查询效率高,低精度比高精度查询效率高,低精度包括int,bigint,float,double,高精度比如DECIMAL
二、索引
2.1 默认索引:前缀索引、zonemap索引,其他索引:倒排索引、Bloomfilter 索引、N-Gram Bloomfilter 索引和 Bitmap 索引
2.2 前缀索引:doris默认会把key列的前36字节作为前缀索引,特别适合where范围查询,但一定要把字符串类型列放在最后,因为第一列是字符串的话doris默认忽略接下来的字段
2.3 倒排索引:前缀索引只有一个,如果需要更多索引可以考虑倒排索引,对于文本类型的全文检索,以及字符串、数值、日期时间类型字段上的等值或范围查询,均可利用倒排索引来加速查询。
三、HINT
用来强制重写sql执行计划,重点解决数据倾斜、表join、view未能透明改写
3.1 数据倾斜:采用distribute-hint的随机分桶策略,数据倾斜发生情形比如建表的时候按userid分桶,但是select count(user_id) from user group by user_group按照user_group字段
分组,user_group=会员可能占据80%,这样会导致部分be节点有几亿条数据,但有些be节点只有几千条数据,
3.2 表join: 一般是小表驱动大表(小表 join 大表),采用leading-hint(优化 JOIN 顺序)
3.3 view未透明改写: 物化视图 Hint

posted @ 2025-12-08 14:14  秋水依然  阅读(4)  评论(0)    收藏  举报