Bunu anlamıyorum.
Bu dizinleri içeren bir tablo var
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
Tabloda (sadece) 346 000 satır vardır. 2 sorgu yapmaya çalışıyorum.
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')
süre 4.05 saniye sürer
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 saniye sürer.
EXPLAIN, tek farkın fulltext
olası_anahtarlarda olduğunu gösterir ( post_text dahil, LIKE
değil)
Bu gerçekten garip.
Bunun arkasında ne var? Arka planda neler oluyor? LIKE
Dizin kullanılmadığında nasıl bu kadar hızlı ve dizin kullanılırken FULLTEXT bu kadar yavaş olabilir?
UPDATE1:
Aslında şimdi yaklaşık 0,5 saniye sürüyor, belki masa kilitliydi, ama yine de, profili açtığımda FULLTEXT INITIALIZATION'ın 0.2 saniye sürdüğünü gösteriyor. Naber?
LIKE
Masamı saniyede 10x, tam metin sadece 2x ile sorgulayabilirim
Update2:
Sürpriz!
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)
bu yüzden soruyorum, bu nasıl mümkün olabilir?
Bunlara ek olarak,
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
gerçekten yavaş. Tam metin herhangi bir kırık olabilir mi?
Update3:
Ne oluyor be?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
süre 0.27s sürer
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
30 saniyeden fazla sürüyor! Burada yanlış giden ne?