Ich verstehe das nicht.
Ich habe eine Tabelle mit diesen Indizes
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
Die Tabelle enthält (nur) 346 000 Zeilen. Ich versuche 2 Abfragen durchzuführen.
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')
dauert 4,05 Sekunden während
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%')
dauert 0,027 Sekunden.
EXPLAIN zeigt, dass der einzige Unterschied in möglichen_ fulltext
Schlüsseln besteht ( hat post_text enthalten, LIKE
nicht)
Das ist wirklich seltsam.
Was steckt dahinter? Was passiert im Hintergrund? Wie kann LIKE
man so schnell sein, wenn man keinen Index verwendet, und FULLTEXT so langsam, wenn man seinen Index verwendet?
UPDATE1:
Eigentlich dauert es jetzt ungefähr 0,5 Sekunden, vielleicht war die Tabelle gesperrt, aber wenn ich die Profilerstellung einschalte, zeigt sich, dass die FULLTEXT-INITIALISIERUNG 0,2 Sekunden gedauert hat. Was geht?
Ich kann meine Tabelle mit LIKE
10x pro Sekunde abfragen , mit Volltext nur 2x
UPDATE2:
Überraschung!
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)
Also frage ich, wie ist das möglich?
Zusätzlich,
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
ist sehr langsam. Kann Volltext kaputt sein?
UPDATE3:
Was zum Teufel?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
dauert 0,27s während
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
dauert mehr als 30 Sekunden! Was läuft hier falsch?