一张主表(user),存人员基本信息
user_id,name,age,gender 等等
一张扩展属性表(user_info)
user_info_id,user_id,key,value
因为不同类型的人员下面一直会增加属性,因此除了基本的人员表,还使用了一张属性扩展表用来存额外的属性,现在有需求要做多条件筛选,可能会有十个以上的条件。
比如 age>20,gender = ‘男’,salary> 5000,address=‘广东’。其中 salary 和 address 是存在扩展表 info 中的,那么多条件查询的时候 sql 要怎么写才高效呢
目前的写法是
SELECT * FROM user
WHERE age> 20 AND gender = ‘男’ AND user_id IN (
SELECT user_id FROM user_info
WHERE (`key` ='salary' AND value > 5000) OR (`key` ='address' AND value = ‘广东’)
GROUP BY user_id )
但是用 IN 查询太慢了
而且而且扩展表里的属性有可能包含时间,value 是 string 格式的,如果涉及到时间区间的筛选又该怎么处理呢
请教各位大手子
user_id,name,age,gender 等等
一张扩展属性表(user_info)
user_info_id,user_id,key,value
因为不同类型的人员下面一直会增加属性,因此除了基本的人员表,还使用了一张属性扩展表用来存额外的属性,现在有需求要做多条件筛选,可能会有十个以上的条件。
比如 age>20,gender = ‘男’,salary> 5000,address=‘广东’。其中 salary 和 address 是存在扩展表 info 中的,那么多条件查询的时候 sql 要怎么写才高效呢
目前的写法是
SELECT * FROM user
WHERE age> 20 AND gender = ‘男’ AND user_id IN (
SELECT user_id FROM user_info
WHERE (`key` ='salary' AND value > 5000) OR (`key` ='address' AND value = ‘广东’)
GROUP BY user_id )
但是用 IN 查询太慢了
而且而且扩展表里的属性有可能包含时间,value 是 string 格式的,如果涉及到时间区间的筛选又该怎么处理呢
请教各位大手子