„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > ## Wie kann ich MySQL LIKE \'%string%\'-Abfragen mit InnoDB optimieren?

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

Veröffentlicht am 01.11.2024
Durchsuche:599

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

Optimierung 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

Bedenken Sie die folgende Tabelle:

CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

Beim Ausführen einer Abfrage wie:

SELECT id FROM example WHERE keywords LIKE '%whatever%'

können wir davon ausgehen, dass die Datenbank dies tut Verwenden Sie einen Index, um die Suche zu beschleunigen. Wenn wir jedoch einen einfachen Index zur Schlüsselwortspalte hinzufügen mit:

ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);

, zeigt eine EXPLAIN-Abfrage dies an MySQL muss immer noch die gesamte Tabelle scannen.

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 und zwingt MySQL, 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3