Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Do ponto de vista do desempenho, quão eficiente é usar uma tabela temporária do MySQL para um recurso de site altamente usado?


O que você afirmou está totalmente correto, a tabela temporária só ficará visível para o usuário/conexão atual. Ainda assim, há alguma sobrecarga e alguns outros problemas, como:
  • Para cada uma das milhares de pesquisas que você vai criar e preencher essa tabela (e soltá-la mais tarde) - não por usuário, por pesquisa. Porque cada pesquisa provavelmente irá reexecutar o script, e "por sessão" não significa sessão PHP - significa sessão de banco de dados (conexão aberta).
  • Você precisará do CREATE TEMPORARY TABLES privilégio, que você pode não tem.
  • Ainda assim, essa tabela realmente deve ter o tipo MEMORY, que rouba sua RAM mais do que parece. Porque mesmo tendo VARCHAR, as tabelas MEMORY usam armazenamento de linha de comprimento fixo.
  • Se sua heurística mais tarde precisar se referir a essa tabela duas vezes (como SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ... ) - isso não é possível com tabelas MEMORY.

Em seguida, seria mais fácil para você - e também para o banco de dados - adicionar o LIKE '%xyz%' diretamente para suas images tabelas WHERE cláusula. Ele fará o mesmo sem a sobrecarga de criar uma TEMP TABLE e juntá-la.

Em qualquer caso - não importa o caminho que você vá - que ONDE será terrivelmente lento. Mesmo se você adicionar um índice em images.name você provavelmente precisará de LIKE '%xyz%' em vez de LIKE 'xyz%' , para que o índice não seja usado.

Não. :)

Opções alternativas

O MySQL tem uma Fulltext-Search (desde 5.6 também para InnoDB) que até pode te dar essa pontuação:eu recomendo dar uma lida e uma tentativa. Você pode ter certeza de que o banco de dados sabe melhor do que você como fazer essa pesquisa com eficiência.

Se você for usar MyISAM em vez de InnoDB, esteja ciente da limitação frequentemente negligenciada de que as pesquisas FULLTEXT só retornam qualquer coisa se o número de resultados for inferior a 50% do total de linhas da tabela.

Outras coisas que você pode querer ver, são, por exemplo, Solr (uma boa introdução lida para esse tópico em si seria o início de
http://en.wikipedia.org/wiki/Apache_Solr ). Estamos usando-o em nossa empresa e ele faz um ótimo trabalho, mas requer bastante aprendizado.

Resumo

A solução para o seu problema atual (a pesquisa) é usar os recursos FULLTEXT.

Para lhe dar um número, 10.000 chamadas por segundo já não é "trivial" - com centenas de milhares de pesquisas por segundo, o tipo de problemas de desempenho que você encontrará estão em toda parte em sua configuração. Você vai precisar de alguns servidores, balanceamento de carga e toneladas de outras porcarias tecnológicas incríveis. E um destes será por exemplo Solr;)