Mysql反向模式匹配 - 替代?

时间:2017-04-07 14:46:12

标签: mysql database database-design pattern-matching

假设我在MySQL数据库表中有以下值:

a
ab
abc
abcd

我正在寻找一种快速方法来检索作为输入前缀的所有值。显然这有效:

SELECT * FROM table WHERE 'abcde12345' LIKE CONCAT(col, '%');

...但是在大型数据集上非常慢。 是否有更智能的方法来存储数据以实现快速查找?

1 个答案:

答案 0 :(得分:0)

可能帮助,以及INDEX(col)

SELECT  *
    FROM  table
    WHERE  col BETWEEN 'a' AND 'abcde12345'
      AND  'abcde12345' LIKE CONCAT(col, '%');

更有可能:

SELECT *
    FROM  table
    WHERE col IN ('a', 'ab', 'abc', ..., 'abcde12345');

后一个版本可以使用'abcde12345'中的代码构建,或者(更痛苦地)在存储过程中构建。