sql多过滤器usersearch的索引结构

时间:2017-09-14 12:22:27

标签: mysql sql

我的用户可以使用任意组合0到5个过滤器查询数据:

id, data, filter1, filter2, filter3, filter4, filter5
1, xxx, 1, 2, 3, 4, 5
2, yyy, 5, 6, 6, 3, 52

我认为复合索引不会起作用,因为有太多可能的组合。过滤器列上的5个单列索引是我的下一个最佳选择吗?

更新:

参考@GordonLinoff建议:

我可以添加一个键值表,而不是为过滤器定义多个列:

data_table_id, key, value
1, filter1, 1
1, filter2, 2
1, filter3, 3
1, filter4, 4
1, filter5, 5
2, filter1, 5
2, filter2, 6
2, filter3, 6
2, filter4, 3
2, filter5, 52

但是,我将如何使用原始查询:

SELECT * FROM tbl WHERE filter1 > 1 AND filter2 > 5

这个新结构?

更新:

好的,这是查询的解决方案:

SELECT * FROM results WHERE id IN(
  SELECT result_id FROM (
    SELECT COUNT(result_id) AS matches, result_id FROM filters
    WHERE (key = "gender" AND val = 'm') OR (key = "age" AND val > 30 )
    GROUP by result_id
  ) WHERE matches = 2
)

有异议吗?

0 个答案:

没有答案