在Mysql中REGEP减速查询

时间:2014-08-01 10:59:02

标签: php mysql sql regex

How to query comma delimited field of table to see if number is within the field

如果列包含特定数字,例如981,我想从表中选择行。这些列中的数据为0,null或格式如下:

1007,1035,1189,908,977,974,979,973,982,981,1007

我在上面的链接中做了一个像。我使用了IN ('7','3','12','1','10','13','2')&它从Table获得的行只有22K。对于相同的查询如果我使用REGEXP '7|3|12|1|10|13|2',它会从同一个表中返回近119K行。但REGEXP使查询变慢。有没有什么方法可以让我的查询更快?

1 个答案:

答案 0 :(得分:1)

您的regexp令人困惑。因此,7匹配1777in可以满足您的需求。

首先,我不建议将值存储在以逗号分隔的列表中。如果你真的需要(比如不熟悉设计数据库的人),那就使用find_in_set()

where find_in_set(7, list) > 0 or
      find_in_set(3, list) > 0 or
      . . .

或者,将分隔符放在regexp中。我认为它看起来像:

where concat(',', list, ',') regexp '(,7,)|(,3,)|(,12,)|(,1,)|(,10,)|(,13,)|(,2,)'