Doris索引的优化

一、‌智能索引优化

  1. 前缀索引策略
    • 将高频过滤字段(如时间戳、用户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)  -- 前两列自动生成前缀索引
  1. ZoneMap索引利用
    • 自动为每列维护Min/Max值,适合范围查询优化:
SELECT * FROM sales WHERE amount BETWEEN 1000 AND 5000;  -- 自动过滤无效数据块

 

 

二、‌二级索引优化

  1. 倒排索引(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
  1. Bitmap索引
    • 低基数列(如性别、省份)快速统计:
ALTER TABLE users ADD INDEX idx_gender (gender) USING BITMAP;  -- 加速COUNT(DISTINCT)查询

 

三、‌索引组合策略

  1. 多条件查询优化
    • 联合使用前缀索引+倒排索引:

  -- ts走前缀索引,content走倒排索引

SELECT * FROM logs
WHERE ts >= '2025-04-01' AND content LIKE '%error%';

 

  1. 索引存储优化
    • 调整索引压缩策略降低存储开销:
ALTER TABLE logs SET ("compression" = "LZ4");  -- 倒排索引压缩率提升30%

 

四、‌避坑指南

  1. 索引失效场景
    • 前缀索引超过36字节或包含非排序字段时失效
    • Bitmap索引在Aggregate表仅支持Key列
  2. 维护成本控制
    • 单个表索引总数建议≤5个,避免写入性能下降超过20%
    • 定期清理无效索引:
SHOW INDEX FROM orders;  -- 分析索引使用频率

 

五、‌性能对比

索引类型

适用场景

查询加速效果

存储开销

前缀索引

排序键范围查询

5-10倍

倒排索引

文本模糊匹配/非主键过滤

40倍↑

BloomFilter

高基数列精确过滤

3-5倍

Bitmap

低基数列聚合统计

10倍↑

‌:优化前需通过EXPLAIN验证索引命中情况,推荐优先优化影响80%查询的核心业务表。

posted @ 2025-04-22 11:06  业余砖家  阅读(199)  评论(0)    收藏  举报