2016-06-22 16 views
0

Wir haben Tabelle mit nur einer Spalte mit dem Namen number. Es enthält Blacklist-Nummern. Wenn zum Beispiel ein Datensatz 12345 Nummern hat, werden alle Nummern, die mit 12345 beginnen, auf die schwarze Liste gesetzt, hier wird 123456789 auf die schwarze Liste gesetzt. für das wir unter SQL-AbfrageOptimieren Reverse LIKE Abfrage in Mysql

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

number 
=== 
12345 
1234587 
98708293 

Ich denke, diese Abfrage jeden Index nicht verwenden verwenden, so dass ich war auf der Suche diese Abfrage

+0

Verwenden Sie es in einer Verknüpfung mit einer anderen Tabelle? Es sollte in der Lage sein, den Index für die Spalte in der anderen Tabelle zu verwenden. – Barmar

+0

Ich glaube nicht, dass es eine Möglichkeit gibt, die Suche in der Blacklist-Tabelle zu optimieren. – Barmar

+0

nein, dies ist eine einzelne eigenständige Abfrage –

Antwort

3

ändern die Abfrage zu optimieren:

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

und erstellen Sie einen Index auf number.

Wenn Sie die Abfrage von einer Programmiersprache ausführen, sollte es in der Lage sein, die IN-Liste dynamisch zu erstellen, indem Sie eine Schleife für die Eingabezeichenfolge verwenden. Wenn Sie dies vollständig in MySQL tun, können Sie dies in einer gespeicherten Prozedur tun.