esquisa @MySQL FULLTEXT em> 1 tabela
Como um caso mais geral deessa questã porque acho que pode ser do interesse de mais pessoas ... Qual é a melhor maneira de realizar uma pesquisa de texto completo em duas tabelas? Suponha que haja três tabelas, uma para programas (com submitter_id) e uma para tags e descrições com object_id: chaves estrangeiras referentes a registros em programas. Queremos o submitter_id dos programas com determinado texto em suas tags OU descrições. Temos que usar o MATCH CONTRA por razões que não abordarei aqui. Não se preocupe com esse aspecto.
programs
id
submitter_id
tags_programs
object_id
text
descriptions_programs
object_id
text
O seguinte funciona e é executado em aproximadamente 20 ms:
SELECT p.submitter_id
FROM programs p
WHERE p.id IN
(SELECT t.object_id
FROM titles_programs t
WHERE MATCH (t.text) AGAINST ('china')
UNION ALL
SELECT d.object_id
FROM descriptions_programs d
WHERE MATCH (d.text) AGAINST ('china'))
mas tentei reescrever isso como um JOIN da seguinte maneira e ele é executado por um tempo muito longo. Eu tenho que matá-lo depois de 60 segundos.
SELECT p.id
FROM descriptions_programs d, tags_programs t, programs p
WHERE (d.object_id=p.id AND MATCH (d.text) AGAINST ('china'))
OR (t.object_id=p.id AND MATCH (t.text) AGAINST ('china'))
Apenas por curiosidade, substituí o OR por AND. Isso também ocorre em alguns milissegundos, mas não é o que eu preciso. O que há de errado com a segunda consulta acima? Eu posso viver com a UNION e subselecionar, mas eu gostaria de entender.