私はこれを取得していません。
これらのインデックスを持つテーブルがあります
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
テーブルには(のみ)346 000行があります。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秒かかったことが示されます。調子はどう?
1 LIKE
秒あたり10倍、フルテキストは2倍でテーブルをクエリできます
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')
本当に遅いです。全文が壊れている可能性はありますか?
UPDATE3:
なんてこったい?
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秒以上かかります!ここで何が問題になっていますか?