我们有一个MySQL DB(v 5.5),它为大型网站提供支持。该网站的一部分包含一个超过2,000,000个帖子的论坛。
该网站最近的流量大幅增加(约700 - > 1,000个并发连接),这导致网站上的查询速度非常慢。在分析了慢查询日志之后,我们看到了很多这种形式的查询:
-- Time: 120923 20:00:08
-- User@Host: muselive_ldu[muselive_ldu] @ localhost []
-- Query_time: 61.101385 Lock_time: 0.000050 Rows_sent: 2 Rows_examined: 346970
SET timestamp=1348430408;
SELECT fp_id FROM ldu_forum_posts WHERE fp_topicid='13731' ORDER BY fp_id ASC LIMIT 2;
-- Time: 120923 20:01:09
-- User@Host: muselive_ldu[muselive_ldu] @ localhost []
-- Query_time: 376.077866 Lock_time: 72.060203 Rows_sent: 2 Rows_examined: 2214232
SET timestamp=1348430469;
SELECT fp_id FROM ldu_forum_posts WHERE fp_topicid='52526' ORDER BY fp_id ASC LIMIT 2;
我不是MySQL专家,但Rows_examined部分让我头痛。我们在一个包含大约2,000,000行的表上进行查找,但是我们通过'fp_id'查询,它有一个应用了btree索引。尽管存在该索引,但Rows_examined计数从~300,000波动到全表扫描。我还应该提到我们也有fp_topicsid的索引。
有谁知道我们为什么会看到这个?真的很感激一些帮助:)
谢谢!