哪个查询更优化?

时间:2013-11-29 15:54:45

标签: php mysql database database-design laravel-4

目前我们有以下组合的不同数据,一个用逗号分隔,另一个用逗号分隔在同一个表中。

#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

或者我是否需要更改数据库并使所有值都采用相同的格式?

任何有关最佳做法的帮助或建议都将受到赞赏。

2 个答案:

答案 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

sqlfiddle demo