Doris 2.1.8 倒排索引与Ngram索引一起使用 性能极差

Viewed 17

当前有一张表t1,里面有两个字段 c1,c2。其中c1字段平均长度为1k,使用的是倒排索引,用的是chinese分词器且支持短语分词,c2字段使用的是ngram索引,数据量每天平均1.5亿,2T左右。
当前使用的SQL语句为
select c1,c2 from t1 where time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and (c1 MATCH_PHRASE 'password' or c2 like '%password%') order by time desc limit 10000 使用这个方式查询就非常慢,达到100s,磁盘io 很高。
查询下面这几个SQL时,都非常快10-20s,io也不高。

  1. 单个c1倒排索引 检索条件,查询c1与c2字段
    select c1,c2 from t1 where time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and c1 MATCH_PHRASE 'password' order by time desc limit 10000
  2. 单个c2 ngram索引 检索条件,查询c1与c2字段
    select c1,c2 from t1 where time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and c2 like '%password%' order by time desc limit 10000
  3. c1倒排索引 + c2 ngram索引 检索条件,单独查询c2字段
    select c2 from t1 where time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and ( c1 MATCH_PHRASE 'password' or c2 like '%password%') order by time desc limit 10000

Select c1,c2 from t1 where time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and (c1 MATCH_PHRASE 'password' or c2 like '%password%') order by time desc limit 10000 这个SQL执行时间差距过大,不太理解为啥会这样?执行时是不是因为c2字段使用的是ngram,不是精准匹配的,在读取原始数据去精准匹配的时候也把c1字段的内容也扫描出来了(即使c1字段不满足条件)

0 Answers