mysql - 优化mysql中的反向LIKE查询

标签 mysql indexing

我们的表格只有一列名为number。它包含黑名单号码。 例如,如果任何记录有 12345 号码,则所有以 12345 开头的号码都将被列入黑名单,这里 123456789 将被列入黑名单。 为此,我们使用下面的 sql 查询

select number from table WHERE '12345679' like concat(number,'%')

number
===
12345
1234587
98708293

我认为这个查询没有使用任何索引,所以我想优化这个查询

最佳答案

将查询更改为:

SELECT number
FROM table
WHERE number IN ('1', '12', '123', '1234', '12345', '123456', '1234567', '12345679')

并在 number 上创建索引。

如果您从编程语言执行查询,它应该能够使用输入字符串上的循环动态创建 IN 列表。如果您完全在 MySQL 中执行此操作,则可以在存储过程中执行。

关于mysql - 优化mysql中的反向LIKE查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37971124/

相关文章:

php - MySQL数据库数据变化后刷新页面

python pandas index.get_loc 引发 KeyError 尽管 key 存在

mongodb - 我可以删除默认的 MongoDB 索引吗?

mysql - Hibernate 标识符名称对于 MySQL 索引来说太长

arrays - 不能在下标中使用索引

mysql - MySql : number of rows or size of file? 性能瓶颈

PHP 分配链接中的位置

PHP5 : calling external functions, 和记录错误

mysql - 通过 PHP 合并 MySQL 表

mysql - 如何将这些表规范化为 3NF