2016-06-22 14 views
0

numberという名前のカラムが1つしかないテーブルがあります。ブラックリスト番号が含まれています。 たとえば、レコードに12345の数字がある場合、12345で始まるすべての数字はブラックリストに載せられます。ここでは123456789がブラックリストに載せられます。mysqlで逆引きLIKEクエリを最適化

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

:私たちは、私はこのクエリは、任意のインデックスを使用していないと思うので、私はに

+0

他のテーブルとの結合でこれを使用していますか?他の表の列の索引を使用できるはずです。 – Barmar

+0

ブラックリストテーブルの検索を最適化する方法はないと思います。 – Barmar

+0

いいえ、これは単一スタンドアロン問合せ –

答えて

3

変更クエリをこのクエリを最適化するために探していたSQLクエリの下

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

number 
=== 
12345 
1234587 
98708293 

を使用している。このため numberにインデックスを作成します。

プログラミング言語からクエリを実行している場合、入力文字列にループを使用してINリストを動的に作成できるはずです。完全にMySQLでやっているのであれば、ストアドプロシージャで実行できます。