表单数据中包含了大量(100个)多选选项类型字段,每个字段最多可以选择100个,使用数组字段存储合理吗, 用array_contains测试下来查询很慢,600W数据量测试下来需要8秒,
,有更好的方案吗采用不同的字段存储性能是最快的。可以测试一下flat json功能是否满足当前的性能要求
我看了一下flat json应该解决不了这个问题。
我在补充一下cdp_user2表中有100个数组字段,item1_id,…,item100_id;都是 ARRAY<VARCHAR ( 255 )>类型,用户查询可能会按多个字段组合,比如:select count(*) from cdp_user2 where array_contains(item2_id, ‘aaron76’) and array_contains(item3_id, ‘aaron76’)…,怎么能支持cdp_user2 1千万的数据量查询,如果用关系型数据库,可能就是把数组字段,单独提到一张表里面,做成一对多关系。
不管采用数组还是json,慢的原因都是在解析这里。如果flat json满足不了性能需要,需要拆分成具体的字段存储。
数据进行预处理,维护(字段 + 选项)到id的映射,所有的array字段整合为一个bitmap字段试一试?