나는 이것을 얻지 못한다.
이 색인이있는 테이블이 있습니다.
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
테이블에 3 억 6 천 행이 있습니다. 2 개의 쿼리를 수행하려고합니다.
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')
동안 4.05 초 소요
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%')
0.027 초가 걸립니다.
EXPLAIN은 possible_keys에 유일한 차이점이 있음을 보여줍니다 ( fulltext
post_text 포함, 포함 LIKE
되지 않음)
정말 이상합니다.
이 뒤에 무엇입니까? 백그라운드에서 무슨 일이 일어나고 있습니까? LIKE
인덱스를 사용하지 않을 때 어떻게 그렇게 빠를 수 있고 인덱스를 사용할 때 FULLTEXT를 너무 느리게 할 수 있습니까?
업데이트 1 :
실제로는 약 0.5 초가 걸리고 테이블이 잠겨있을 수 있지만 프로파일 링을 켤 때 FULLTEXT INITIALIZATION이 0.2 초 걸린다는 것을 보여줍니다. 뭐야?
전체 LIKE
텍스트 만 2x로 초 당 10x로 테이블을 쿼리 할 수 있습니다
UPDATE2 :
놀라다!
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)
그래서 묻습니다. 어떻게 이것이 가능합니까?
또한
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
정말 느립니다. 전체 텍스트가 손상 될 수 있습니까?
업데이트 3 :
도대체?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
0.27 초 소요
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
30 초 이상 걸립니다! 여기서 무엇이 잘못 되었나요?