hhhhhccccc
85 天前
这种我用的 json, 索引上用的 multi-value index, 但是几百个的我还真没整过, 可以试下
属性就存 id, 有的话, 值为 1, 就把属性 id 放到 attrs 中,
create table demo (
id int unsigned primary key,
name varchar(255) not null,
attrs json, -- int[], id 从另外一张表来
created_at xx,
updated_at xx,
index idx_attrs ((cast(attrs as unsigned array)))
);
你的要求
1. 占用空间尽量小 [v]
2. 查询方便 [v]
同时是 1
select json_contains(json_array(1,2,3), json_array(1,2)); -> 1
select json_contains(json_array(1,2,3), json_array(1,2, 3)); -> 0
select id, name from demo where json_contain(demo, '[1,2,3]');
其中有一个是 1
select json_overlaps(json_array(1,2,3), json_array(1,2,4)); -> 1
select json_overlaps(json_array(1,2,3), json_array(4)); -> 0
select id, name from demo where json_overlaps(demo, '[1,2,3]');
只查一个的话, 可以用 member of
项目中已经用了, 非常爽
总共数据量几百万, 快上千万, 速度快, explain 就知道不是 ref, 是 range
使用 json 的话, 写 sql 有时候会麻烦很多, 并且要做好前置的校验, 当然用 json 真的爽