Hvis du har brug for sofistikerede søgefunktioner, så brug en fuldtekst søgeløsning.
I MySQL er det indbyggede fuldtekstsøgeindeks funktion virker kun i MyISAM-lagringsmotoren. Dette er uheldigt, fordi InnoDB er den foretrukne storage-motor til alle MySQL-tabeller. InnoDB i nyere versioner af MySQL er hurtigere end MyISAM i de fleste tilfælde og har bedre funktioner til gendannelse af nedbrud end MyISAM.
Der har været udtalelser fra MySQL-udviklerteamet om, at de har til hensigt at implementere et fuldtekstindeks til InnoDB. Men vi er mange måneder eller endda år væk fra, at dette er tilgængeligt, og det vil helt sikkert kræve en opgradering til en senere version af MySQL.
Hvis du skal bruge MyISAM fuldtekstindekser, vil jeg foreslå at gemme dine data primært i InnoDB og derefter gemme en kopi af den søgbare tekst i en MyISAM-tabel.
Du kan også bruge en ekstern løsning som Sphinx Search eller Apache Solr at give fuldtekst søgefunktioner eksternt til databasen. Der er endda en måde at bruge et Sphinx Search-indeks via den MySQL-stikbare storage-motorgrænseflade .
Jeg kan ikke lide at bruge LIKE
med jokertegn eller REGEXP
til fuldtekstsøgninger. Disse løsninger kræver fuld tabelscanninger for hver søgning, og afhængigt af mængden af dine data kører de hundredvis eller tusindvis af gange langsommere, end hvis du har et indeks.
Jeg skrev en sammenligning af fuldtekstsøgeløsninger til MySQL i min præsentation, "Praktisk fuldtekstsøgning i MySQL ," og også i et kapitel i min bog SQL Antipatterns:Avoiding the Pitfalls of Database Programming .
opdatering:MySQL 5.6 er i øjeblikket under udvikling (fra februar 2012) og implementerer en fuldtekstindeksløsning til InnoDB.