php - Mysql 中的 REGEP 减慢查询

标签 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') & 它只从表中获取 22K 行。对于相同的查询,如果我使用 REGEXP '7|3|12|1|10|13|2' 它会从同一个表返回近 119K 行。但 REGEXP 会使查询变慢。有什么方法可以让我的查询更快吗?

最佳答案

您的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,)'

关于php - Mysql 中的 REGEP 减慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078782/

相关文章:

php - 构建 PHP 代码以链接对象创建和数据库写入?

php - SQL 分组不按预期工作

mysql - sql插入一直报错

sql - MS Access 数据库中的最短路径

带子查询的SQL Sum?

php - 必须使用事件访问 token 来查询有关当前用户的信息

php - 用于 LAMP 堆栈上 MySQL 数据库的 NoSQL 副本的 MongoDB 与 CouchDB

sql - 如何在SQL中拆分和显示单词的不同字母?

php - 如何获取目录下的所有csv文件名?

php - 为什么PaaS提供商建议在部署时安装依赖项? (对于 PHP 或 NodeJS 以及可能其他)