ewemli's antwoord is in de goede richting, maar je zou FULLTEXT en soundex mapping moeten combineren, niet de fulltext vervangen, anders zijn je LIKE-query's waarschijnlijk erg traag.
create table with_soundex (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
original TEXT,
soundex TEXT,
FULLTEXT (soundex)
);
insert into with_soundex (original, soundex) values
('add some test cases', CONCAT_WS(' ', soundex('add'), soundex('some'), soundex('test'), soundex('cases'))),
('this is some text', CONCAT_WS(' ', soundex('this'), soundex('is'), soundex('some'), soundex('text'))),
('one more test case', CONCAT_WS(' ', soundex('one'), soundex('more'), soundex('test'), soundex('case'))),
('just filling the index', CONCAT_WS(' ', soundex('just'), soundex('filling'), soundex('the'), soundex('index'))),
('need one more example', CONCAT_WS(' ', soundex('need'), soundex('one'), soundex('more'), soundex('example'))),
('seems to need more', CONCAT_WS(' ', soundex('seems'), soundex('to'), soundex('need'), soundex('more')))
('some helpful cases to consider', CONCAT_WS(' ', soundex('some'), soundex('helpful'), soundex('cases'), soundex('to'), soundex('consider')))
select * from with_soundex where match(soundex) against (soundex('test'));
+----+---------------------+---------------------+
| id | original | soundex |
+----+---------------------+---------------------+
| 1 | add some test cases | A300 S500 T230 C000 |
| 2 | this is some text | T200 I200 S500 T230 |
| 3 | one more test case | O500 M600 T230 C000 |
+----+---------------------+---------------------+
select * from with_soundex where match(soundex) against (CONCAT_WS(' ', soundex('test'), soundex('some')));
+----+--------------------------------+---------------------------+
| id | original | soundex |
+----+--------------------------------+---------------------------+
| 1 | add some test cases | A300 S500 T230 C000 |
| 2 | this is some text | T200 I200 S500 T230 |
| 3 | one more test case | O500 M600 T230 C000 |
| 7 | some helpful cases to consider | S500 H414 C000 T000 C5236 |
+----+--------------------------------+---------------------------+
Dat geeft behoorlijk goede resultaten (binnen de limieten van de soundex-algo) terwijl maximaal gebruik wordt gemaakt van een index (elke zoekopdracht LIKE '%foo' moet elke rij in de tabel scannen).
Let op het belang van het uitvoeren van soundex op elk woord, niet op de hele zin. U kunt ook uw eigen versie van soundex op elk woord uitvoeren in plaats van SQL dit te laten doen, maar zorg er in dat geval voor dat u dit zowel bij het opslaan als bij het ophalen doet, voor het geval er verschillen zijn tussen de algoritmen (de algo van MySQL beperkt bijvoorbeeld niet zichzelf naar de standaard 4 tekens )