2017-04-07 75 views
0

可以說我有一個MySQL數據庫表以下值:Mysql反向模式匹配 - 替代?

a 
ab 
abc 
abcd 

我正在尋找一個快速的方法來檢索是我輸入的前綴的所有值。顯然這是有效的:

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

...但在大型數據集上速度很慢。 有沒有更聰明的方法來存儲數據以實現快速查找?

+0

所以在這種情況下,你的輸入是'abcde12345',你的結果應該是'{a ab,abc,abcd}'? –

+0

@JuanCarlosOropeza! – jvataman

+0

你可以試試Willem的建議,你是否爲'col'創建索引? –

回答

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',或者(更痛苦)在一個存儲過程中。