Problemet med sökningen av typen '%keyword%' är att det inte finns något sätt att effektivt söka på den i en vanlig tabell, även om du skapar ett index på den kolumnen. Tänk på hur du skulle se ut den strängen i telefonboken. Det finns faktiskt inget sätt att optimera det - du måste skanna hela telefonboken - och det är vad MySQL gör, en fullbordsskanning.
Om du ändrar den sökningen till "sökord%" och använder ett index, kan du få mycket snabb sökning. Det låter som att det inte är det du vill ha.
Så med det i åtanke har jag använt fulltextindexering/sökning ganska mycket, och här är några för- och nackdelar:
Proffs
- Mycket snabbt
- Returnerar resultat sorterade efter relevans (som standard, även om du kan använda valfri sortering)
- Stoppord kan användas.
Nackdelar
- Fungerar bara med MyISAM-tabeller
- Ord som är för korta ignoreras (minimum standard är 4 bokstäver)
- Kräver annan SQL i where-sats, så du måste ändra befintliga frågor.
- Matchar inte delsträngar (till exempel "ord" matchar inte "sökord", bara "ord")
Här är lite bra dokumentation om fulltextsökning .
Ett annat alternativ är att använda ett söksystem som Sphinx . Det kan vara extremt snabbt och flexibelt. Den är optimerad för sökning och integrerar väl med MySQL.