ฉันไม่ได้รับสิ่งนี้
ฉันมีตารางที่มีดัชนีเหล่านี้
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 วินาที
อธิบายว่าแสดงความแตกต่างเพียงอย่างเดียวคือเป็นไปfulltext
ได้คีย์ (รวม post_text LIKE
ไม่ได้)
มันแปลกมาก
อะไรอยู่เบื้องหลังสิ่งนี้ เกิดอะไรขึ้นในพื้นหลัง วิธีการอาจLIKE
จะเป็นอย่างนั้นอย่างรวดเร็วเมื่อไม่ได้ใช้ดัชนีและ FULLTEXT เพื่อให้ช้าลงเมื่อใช้ดัชนีของตนหรือไม่
UPDATE1:
ที่จริงตอนนี้ใช้เวลาประมาณ 0.5 วินาทีบางทีตารางอาจถูกล็อค แต่ก็ยังเมื่อฉันเปิดการทำโปรไฟล์ก็แสดงให้เห็นว่าการเริ่มต้น FULLTEXT เริ่มต้นใช้เวลา 0.2 วินาที ว่าไง?
ฉันสามารถสืบค้นตารางของฉันด้วยLIKE
10x ต่อวินาทีพร้อม fulltext เพียง 2x
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 วินาที! เกิดอะไรขึ้นที่นี่?