Eu não estou entendendo isso.
Eu tenho uma tabela com esses índices
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
A tabela possui (apenas) 346 000 linhas. Estou tentando realizar 2 consultas.
SELECT post_id
FROM phpbb_posts
WHERE topic_id = 144017
AND post_id != 155352
AND MATCH(post_text) AGAINST('http://rapidshare.com/files/5494794/photo.rar')
leva 4,05 segundos enquanto
SELECT post_id
FROM phpbb_posts
WHERE topic_id=144017
AND post_id != 155352
AND post_text LIKE ('%http://rapidshare.com/files/5494794/photo.rar%')
leva 0,027 segundos.
EXPLAIN mostra que a única diferença está em possible_keys ( fulltext
inclui post_text, LIKE
não)
Isso é realmente estranho.
O que há por trás disso? O que está acontecendo em segundo plano? Como pode LIKE
ser tão rápido quando não está usando o índice e o FULLTEXT tão lento quando está usando o seu índice?
UPDATE1:
Na verdade, agora leva cerca de 0,5 segundos, talvez a tabela esteja bloqueada, mas ainda assim, quando ligo o perfil, é mostrado que a INICIALIZAÇÃO DO FULLTEXT levou 0,2 segundos. E aí?
Posso consultar minha tabela com LIKE
10x por segundo, com texto completo apenas 2x
UPDATE2:
Surpresa!
mysql> SELECT post_id FROM phpbb_posts WHERE post_id != 2 AND topic_id = 6 AND MATCH(post_text) AGAINST ('rapidshare.com');
Empty set (0.04 sec)
então eu estou perguntando, como isso é possível?
Além disso,
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
é muito lento. O texto completo pode estar quebrado?
UPDATE3:
Que diabos?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
leva 0,27s enquanto
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
leva mais de 30 segundos! o que há de errado aqui?