Het probleem met zoeken van het type '%keyword%' is dat er geen manier is om er efficiënt naar te zoeken in een gewone tabel, zelfs als u een index op die kolom maakt. Bedenk hoe je die string in het telefoonboek zou opzoeken. Er is eigenlijk geen manier om het te optimaliseren - je moet het hele telefoonboek scannen - en dat is wat MySQL doet, een volledige tabelscan.
Als u die zoekopdracht wijzigt in 'keyword%' en een index gebruikt, kunt u heel snel zoeken. Het klinkt echter alsof dit niet is wat je wilt.
Dus met dat in gedachten heb ik nogal wat fulltext indexering/zoeken gebruikt, en hier zijn een paar voor- en nadelen:
Pluspunten
- Heel snel
- Retourneert resultaten gesorteerd op relevantie (standaard, hoewel u elke sortering kunt gebruiken)
- Stopwoorden kunnen worden gebruikt.
Nadelen
- Werkt alleen met MyISAM-tabellen
- Woorden die te kort zijn, worden genegeerd (standaard minimum is 4 letters)
- Vereist een andere SQL in de where-clausule, dus u moet bestaande query's aanpassen.
- Komt niet overeen met gedeeltelijke tekenreeksen (bijvoorbeeld 'woord' komt niet overeen met 'zoekwoord', alleen 'woord')
Hier is wat goede documentatie over zoeken in volledige tekst .
Een andere optie is om een zoeksysteem te gebruiken zoals Sphinx . Het kan extreem snel en flexibel zijn. Het is geoptimaliseerd voor zoeken en integreert goed met MySQL.