Viele Anwendungen erfordern die Suche nach einer Zeichenfolge innerhalb eines Textkörpers. MySQL bietet einen LIKE-Operator zur Durchführung solcher Suchvorgänge, aber wie können wir diese Abfragen für eine optimale Leistung optimieren?
Beachten Sie die folgende Tabelle:
<code class="sql">CREATE TABLE `example` ( `id` int(11) unsigned NOT NULL auto_increment, `keywords` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;</code>
Beim Ausführen einer Abfrage wie:
<code class="sql">SELECT id FROM example WHERE keywords LIKE '%whatever%'</code>
können wir davon ausgehen, dass die Datenbank einen Index verwendet, um die Suche zu beschleunigen. Wenn wir jedoch einen einfachen Index zur Schlüsselwortspalte hinzufügen, indem wir Folgendes verwenden:
<code class="sql">ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);</code>
Eine EXPLAIN-Abfrage zeigt, dass MySQL immer noch die gesamte Tabelle scannen muss.
MySQL verwendet Indizes, indem es den Anfang der Suchzeichenfolge abgleicht. Für Abfragen wie LIKE 'whatever%' kann der Index verwendet werden, da 'whatever' am Anfang der Zeichenfolge verankert ist.
Abfragen wie LIKE '%whatever%' haben jedoch keinen solchen Anker. Der Suchbegriff erscheint „schwebend“ innerhalb der Zeichenfolge, wodurch MySQL gezwungen wird, das gesamte Feld zu scannen.
Um solche Abfragen zu optimieren, können wir Volltextindizes verwenden. Diese Indizes sind speziell für „Floating“-Suchen konzipiert. InnoDB unterstützt seit Version 5.6.4 Volltextindizes, was es zu einer praktikablen Option für die Optimierung von LIKE „%string%“-Abfragen macht.
Das obige ist der detaillierte Inhalt von## Wie kann ich MySQL LIKE \'%string%\'-Abfragen mit InnoDB optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!