在mysql中优化反向LIKE查询

时间:2016-06-22 14:31:56

标签: mysql indexing

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

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

number
===
12345
1234587
98708293

我认为此查询不使用任何索引,因此我希望优化此查询

1 个答案:

答案 0 :(得分:3)

将查询更改为:

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

并在number上创建索引。

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