Tôi không nhận được điều này.
Tôi đã có một bảng với các chỉ mục này
PRIMARY post_id
INDEX topic_id
FULLTEXT post_text
Bảng có (chỉ) 346 000 hàng. Tôi đang cố gắng thực hiện 2 truy vấn.
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')
mất 4,05 giây trong khi
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%')
mất 0,027 giây.
GIẢI THÍCH cho thấy rằng sự khác biệt duy nhất là ở khả fulltext
năng_key ( đã bao gồm postSphere, LIKE
không)
Điều đó thực sự kỳ lạ.
Điều gì đằng sau điều này? Điều gì đang xảy ra trong nền? Làm thế nào có LIKE
thể nhanh như vậy khi không sử dụng chỉ mục và FULLTEXT rất chậm khi sử dụng chỉ mục của nó?
CẬP NHẬT1:
Trên thực tế, bây giờ mất khoảng 0,5 giây, có thể bảng đã bị khóa, nhưng vẫn vậy, khi tôi bật hồ sơ, điều đó cho thấy rằng KHỞI TẠO FULLTEXT mất 0,2 giây. Có chuyện gì vậy?
Tôi có thể truy vấn bảng của mình với LIKE
10 lần một giây, với toàn văn chỉ 2 lần
CẬP NHẬT2:
Sự ngạc nhiên!
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)
Vì vậy, tôi hỏi, làm thế nào là có thể?
Ngoài ra,
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com')
thực sự rất chậm Có thể fulltext bất kỳ bị hỏng?
CẬP NHẬT3:
Cái quái gì thế?
SELECT forum_id, post_id, topic_id, post_text FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
mất 0,27 giây trong khi
SELECT count(*) FROM phpbb_posts WHERE MATCH(post_text) AGAINST ('rapidshare.com') LIMIT 0, 30;
mất hơn 30 giây! Điều gì đang xảy ra ở đây?