Heim  >  Artikel  >  Datenbank  >  ## Wie kann ich MySQL LIKE \'%string%\'-Abfragen mit InnoDB optimieren?

## Wie kann ich MySQL LIKE \'%string%\'-Abfragen mit InnoDB optimieren?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 06:22:02615Durchsuche

## How Can I Optimize MySQL LIKE '%string%' Queries with InnoDB?

Optimieren von MySQL LIKE '%string%'-Abfragen in InnoDB

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?

Problem

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.

Lösung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn