Problemet med søgningen af typen '%keyword%' er, at der ikke er nogen måde at søge effektivt på det i en almindelig tabel, selvom du opretter et indeks på den kolonne. Tænk på, hvordan du ville se den streng op i telefonbogen. Der er faktisk ingen måde at optimere det på - du skal scanne hele telefonbogen - og det er det, MySQL gør, en fuld tabelscanning.
Hvis du ændrer den søgning til 'søgeord%' og bruger et indeks, kan du få meget hurtig søgning. Det lyder dog som om, at det ikke er det, du ønsker.
Så med det i tankerne har jeg brugt en del fuldtekstindeksering/søgning, og her er et par fordele og ulemper:
Fordele
- Meget hurtigt
- Returnerer resultater sorteret efter relevans (som standard, selvom du kan bruge enhver sortering)
- Stopord kan bruges.
Udemper
- Fungerer kun med MyISAM-tabeller
- Ord, der er for korte, ignoreres (standard minimum er 4 bogstaver)
- Kræver anden SQL in where-klausul, så du bliver nødt til at ændre eksisterende forespørgsler.
- Skal ikke matche delstrenge (f.eks. matcher 'ord' ikke 'søgeord', kun 'ord')
Her er noget god dokumentation om fuldtekstsøgning .
En anden mulighed er at bruge et søgesystem såsom Sphinx . Det kan være ekstremt hurtigt og fleksibelt. Det er optimeret til søgning og integreres godt med MySQL.