目前我们有以下组合的不同数据,一个用逗号分隔,另一个用逗号分隔在同一个表中。
#1
id | values
------------
1 | 1,2,3
2 | 4,5,6
3 | 7,8,9
4 | 1
5 | 2
6 | 3
7 | 4
8 | 5
假设我想从表中搜索值1
并计算它。查询这种数据结构的最佳方法是哪种?它是否正在使用:
WHERE value =
WHERE value LIKE
WHERE value IN
或者我是否需要更改数据库并使所有值都采用相同的格式?
任何有关最佳做法的帮助或建议都将受到赞赏。
答案 0 :(得分:1)
请规范化您的数据。这使查询更容易,而且速度更快,可以使用索引。
答案 1 :(得分:0)
我同意将数据规范化是获得最佳性能的方法。但是不改变原理图,你不能真正使用=
,因为你可能有多个数字。在逗号分隔值中计算1的出现次数的一种方法是使用FIND_IN_SET():
SELECT SUM(CASE
WHEN FIND_IN_SET(1, `values`)
THEN 1
ELSE 0
END) AS count1
FROM tab1