Estou projetando um aplicativo que apenas faz consultas de leitura para algumas tabelas do banco de dados (é uma espécie de aplicativo de pesquisa); os dados consultados são atualizados à noite pelo sistema (portanto, a velocidade é menos crítica, embora muito importante aqui também), enquanto os usuários do aplicativo apenas fazem pesquisas de texto completo nos dados armazenados.
O desempenho de recuperação é então um ponto chave da aplicação.
Você pode sugerir links, termos ou argumentos do Google e outros materiais que eu possa ler para projetar adequadamente as partes do banco de dados que estarão envolvidas nas pesquisas dos usuários?
Já sei o básico sobre índices, e verificando as consultas com EXPLAIN, estou lendo sobre particionamento de tabelas para ver se tem algo que possa me ajudar.
O aplicativo será executado no MySQL 5.6
Até agora, sua pesquisa FULLTEXT incorporada é suficiente para nossos requisitos. Estou procurando mais dicas sobre como estruturar adequadamente o banco de dados para não adicionar lentidão desnecessária (aproveitando o fato de que nenhum consulta do usuário atualizará os dados).
Que outras tecnologias de banco de dados devo procurar?
Fulltext Search é uma tecnologia especializada que complementa um banco de dados SQL tradicional. Existe um recurso simples de indexação de texto completo embutido no MySQL, mas você provavelmente encontrará outras alternativas com mais recursos e desempenho superior.
Fiz uma apresentação comparando-os aqui: Full Text Search Throwdown .
A resposta curta: Sphinx Search .
Re seu comentário:
Parece que sua pergunta não é sobre uma solução específica, mas apenas sobre categorias de otimizações de desempenho.
Por fim, o conselho que costumo dar sobre otimização é que todos os métodos listados acima otimizam para uma consulta em detrimento de outras. Por exemplo, a fragmentação é ótima se você ler e gravar linhas individuais, mas a fragmentação torna as coisas piores se você consultar intervalos de linhas que abrangem vários fragmentos.