今天有同事问我,列存大宽表场景下,如果在多个列上有等值过滤条件,OceanBase 的性能是不是无法满足要求?
Hi 晓楚,帮评估个OTS替换场景 大概1亿大宽表,查询姿势就是任意字段的组合,进行等值查询+group by/sum这些聚合操作,业务模型大概是这样1亿表,过滤性最强的字段会扫50万左右数据,单SQL OTS现在不超过300毫秒,这个场景能搞定不?主要也要求OB几百毫秒,我还有个疑问,这种场景是不是没有索引合并的能力耗时很难满足业务要求呢?
.
典型 SQL 如下:
200+字段的大宽表,sql大概就是 select sum(xx),count(*) from tb where a = ? and b = ? and c = ? group by d / order by d limit 20 类似这种
答案是:OceanBase 可以轻松搞定这种场景!
OceanBase 列存表是如何处理 a = ? and b = ? and c = ?
这种多个等值条件的扫描呢?
按照一般的思路,我们会将这三个表达式下压到存储层。存储层需要先按照 a = ?
扫描出所有结果行,得到第一组rowid,然后按照 b = ?
扫描出所有结果行,得到第二组rowid,最后按照 c = ?
扫描出所有结果行,得到第三组rowid,然后把这三组 rowid 求交集,得到最终结果。
这个思路并