O problema de erros ortográficos é difícil, se não impossível, de resolver bem no MySQL puro.
O
FULLTEXT
de várias colunas pesquisa não é tão ruim. Sua consulta ficará mais ou menos assim...
SELECT column, column
FROM table
WHERE MATCH(Company, FirstName, LastName, whatever, whatever)
AGAINST('search terms' IN NATURAL LANGUAGE MODE)
Ele produzirá um monte de resultados, ordenados pelo que o MySQL supõe ser o primeiro acerto mais provável. As suposições do MySQL não são ótimas, mas geralmente são adequadas.
Você precisará de um
FULLTEXT
índice correspondente à lista de colunas em seu MATCH()
cláusula. A criação desse índice se parece com isso. ALTER TABLE book
ADD FULLTEXT INDEX Fulltext_search_index_1
(Company, FirstName, LastName, whatever, whatever);
Não obstante os comentários em sua pergunta, você só precisa de um índice para o grupo de colunas que você pesquisará.
20 mil linhas não serão um grande fardo para qualquer hardware de servidor vintage recente.
Erro de ortografia:você pode tentar
SOUNDEX()
, mas é um algoritmo do início do século 20 projetado pelo Bell System para procurar nomes de pessoas em inglês americano. Ele foi projetado para obter muitos resultados falsos positivos e realmente é mais burro do que um balde de pedras. Se você realmente precisa de correção ortográfica, pode ser necessário investigar o Sphinx.