2016-06-22 160 views
0

我們的表格只有一列,名稱爲number。它包含黑名單號碼。 例如,如果有任何記錄有12345號碼,則所有以12345開頭的號碼都將被列入黑名單,這裏123456789將被列入黑名單。 對於這一點,我們用下面的SQL查詢在mysql中優化反向LIKE查詢

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

number 
=== 
12345 
1234587 
98708293 

我覺得這查詢不使用任何索引,所以我一直在尋找查詢優化這個查詢

+0

您是否在與其他表的連接中使用它?它應該能夠使用另一個表中列的索引。 – Barmar

+0

我不認爲有什麼方法可以優化黑名單表的搜索。 – Barmar

+0

不,這是單獨的獨立查詢 –

回答

3

更改爲:

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

並在number上創建索引。

如果您使用編程語言執行查詢,則應該能夠使用輸入字符串上的循環動態地創建列表IN。如果你完全使用MySQL,你可以在存儲過程中完成。