Doris索引的优化
一、智能索引优化
- 前缀索引策略
- 将高频过滤字段(如时间戳、用户ID)放在AGGREGATE KEY或UNIQUE KEY前36字节内,确保查询命中前缀索引。
- 避免长字符串作为前缀列,优先使用数值类型或短字符串(如VARCHAR(20))。
CREATE TABLE logs ( ts DATETIME, -- 高频过滤字段前置 user_id INT, content TEXT ) ENGINE=OLAP AGGREGATE KEY(ts, user_id) -- 前两列自动生成前缀索引
- ZoneMap索引利用
- 自动为每列维护Min/Max值,适合范围查询优化:
SELECT * FROM sales WHERE amount BETWEEN 1000 AND 5000; -- 自动过滤无效数据块
二、二级索引优化
- 倒排索引(Inverted Index)
- 文本字段全文检索加速:
ALTER TABLE articles ADD INDEX idx_content (content) USING INVERTED; -- 支持LIKE '%关键词%'
- 非主键列等值查询优化(如商品分类ID)
2.Bloom Filter索引
- 高基数列(如订单号、手机号)过滤优化:
ALTER TABLE orders SET ("bloom_filter_columns" = "order_id"); -- 减少90%无效IO
- Bitmap索引
- 低基数列(如性别、省份)快速统计:
ALTER TABLE users ADD INDEX idx_gender (gender) USING BITMAP; -- 加速COUNT(DISTINCT)查询
三、索引组合策略
- 多条件查询优化
- 联合使用前缀索引+倒排索引:
-- ts走前缀索引,content走倒排索引
SELECT * FROM logs WHERE ts >= '2025-04-01' AND content LIKE '%error%';
- 索引存储优化
- 调整索引压缩策略降低存储开销:
ALTER TABLE logs SET ("compression" = "LZ4"); -- 倒排索引压缩率提升30%
四、避坑指南
- 索引失效场景
- 前缀索引超过36字节或包含非排序字段时失效
- Bitmap索引在Aggregate表仅支持Key列
- 维护成本控制
- 单个表索引总数建议≤5个,避免写入性能下降超过20%
- 定期清理无效索引:
SHOW INDEX FROM orders; -- 分析索引使用频率
五、性能对比
|
索引类型 |
适用场景 |
查询加速效果 |
存储开销 |
|
前缀索引 |
排序键范围查询 |
5-10倍 |
无 |
|
倒排索引 |
文本模糊匹配/非主键过滤 |
40倍↑ |
高 |
|
BloomFilter |
高基数列精确过滤 |
3-5倍 |
低 |
|
Bitmap |
低基数列聚合统计 |
10倍↑ |
中 |
注:优化前需通过EXPLAIN验证索引命中情况,推荐优先优化影响80%查询的核心业务表。
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18840268

浙公网安备 33010602011771号