Non lo capisco.
Ho un tavolo con questi indici
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
La tabella ha (solo) 346000 righe. Sto cercando di eseguire 2 query.
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')
richiede 4.05 secondi mentre
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%')
richiede 0,027 secondi.
EXPLAIN mostra che l'unica differenza è in possible_keys ( fulltext
ha incluso post_text, LIKE
no)
È davvero strano.
Cosa c'è dietro questo? Cosa sta succedendo in background? Come può LIKE
essere così veloce quando non si utilizza index e FULLTEXT così lentamente quando si utilizza il suo indice?
Update1:
In realtà ora ci vogliono circa 0,5 secondi, forse la tabella era bloccata, ma ancora, quando accendo il profiling, mostra che INIZIALIZZAZIONE COMPLETA ha impiegato 0,2 secondi. Che cosa succede?
Posso interrogare la mia tabella con LIKE
10 volte al secondo, con testo completo solo 2x
UPDATE2:
Sorpresa!
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)
quindi sto chiedendo, come è possibile?
Inoltre,
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
è molto lento. Può essere fulltext rotto?
Update3:
Che diavolo?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
impiega 0,27 secondi
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
richiede più di 30 secondi! Cosa non va qui?