Es gibt nicht viele, die mit der Abfrage durchgeführt werden kann, wie es ist. Ihr größter Erfolg ist jetzt die Verwendung von %...%
Style LIKE
Aussagen. Wie Gordon bereits in den Kommentaren erwähnt hat, wird dadurch die Fähigkeit von MySQL, Indizes zu verwenden, grundsätzlich aufgehoben.
Die beste Lösung hier wäre, Ihr Schema leicht zu ändern. Ich würde vorschlagen, eine Tabelle zu erstellen, die die Art der Eigenschaft speichert (wie 2-Bett-Wohnung) und dann irgendeine Art von Code (könnte nur ein Int sein). Die Suche nach einem Code ohne die LIKE
-Anweisung würde Ihnen die Möglichkeit geben, einen Index zu verwenden, und wenn Sie unbedingt nach einer ähnlichen Zeichenfolge suchen müssen, können Sie dies als Unterauswahl in einer viel kleineren Tabelle tun.
Bearbeiten zur weiteren Klärung:
Sie für jede Textzeichenfolge zu suchen, die %2-bed flat%
übereinstimmt. Meine Annahme ist, dass Sie dies tun, weil Sie Zeichenfolgen wie cute 2-bed flat
, 2-bed flat near the water
oder andere zufällige Marketing-Dinge haben. Es gibt keine Möglichkeit, Ihre LIKE
STATEMENTS zu optimieren. Sie sind langsam, und das ist eine unglückliche Tatsache des Lebens.
Ich würde eine Spalte zu Ihren aktuellen Tabellen hinzufügen. Wenn die Zeichenfolge mit der Zeichenfolge %2-bed flat%
übereinstimmt, geben Sie ihr einen Wert von etwa 2bf
. Wenn Sie schon dabei sind, können Sie dies mit anderen Suchzeichenfolgen tun, die Sie verwenden können. Setzen Sie einen Index auf diese Spalte.
Sobald dies erledigt ist, können Sie anstelle einer intensiven LIKE
-Anweisung einfach eine indizierte Suche in der neuen Spalte durchführen.
Sie tun '% ..%' "like" übereinstimmt. Diese sind inhärent langsam, weil sie einen vollständigen Tabellenscan erzwingen. –
Die 'LIKE' machen wirklich alles kaputt. Möglicherweise müssen Sie Volltextindizes verwenden, obwohl dies für die gesuchten Zeichenfolgen möglicherweise schwierig ist. –
Ich habe die LIKE auf der 2-Bett-Wohnung entfernt - aber ich habe keine Verbesserung der Leistung gesehen - @GordonLinoff Volltextindizes auf der NW1? –