No entiendo esto.
Tengo una tabla con estos índices.
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
La tabla tiene (solo) 346 000 filas. Estoy tratando de 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')
toma 4.05 segundos mientras
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%')
toma 0.027 segundos.
EXPLAIN muestra que la única diferencia está en fulltext
posible_keys ( tiene post_text incluido, LIKE
no)
Eso es realmente extraño
¿Qué hay detrás de esto? ¿Qué está pasando en el fondo? ¿Cómo puede LIKE
ser tan rápido cuando no se usa el índice y FULLTEXT tan lento cuando se usa su índice?
ACTUALIZACIÓN1:
En realidad, ahora toma alrededor de 0,5 segundos, tal vez la mesa estaba bloqueada, pero aún así, cuando enciendo el perfil, se muestra que la INICIALIZACIÓN DE FULLTEXT tardó 0.2 segundos. ¿Qué pasa?
Puedo consultar mi tabla con LIKE
10x por segundo, con texto completo solo 2x
ACTUALIZACIÓN2:
¡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)
así que pregunto, ¿cómo es esto posible?
Adicionalmente,
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
es realmente lento ¿Se puede romper el texto completo?
ACTUALIZACIÓN3:
¿Que demonios?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
toma 0.27s mientras
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
¡Lleva más de 30 segundos! ¿Qué está pasando mal aquí?