我有一个查询,根据我的慢查询日志,它有点慢......
Query_time: 8.408943 Lock_time: 0.000119 Rows_sent: 1 Rows_examined: 2911766
但是,当我在前面使用EXPLAIN
运行查询时,我得不到相同的结果......
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY forum range PRIMARY PRIMARY 4 NULL 3 Using where; Using temporary; Using filesort
1 PRIMARY category ref PRIMARY,forum_id forum_id 4 source_forum.forum.id 2
1 PRIMARY board ref PRIMARY,category_id category_id 4 source_forum.category.id 4 Using where
1 PRIMARY topic ref PRIMARY,board_id board_id 4 source_forum.board.id 58
1 PRIMARY post ref PRIMARY,topic_id,trash topic_id 4 source_forum.topic.id 16 Using where
3 DEPENDENT SUBQUERY post index topic_id created 4 NULL 1 Using where
2 DEPENDENT SUBQUERY group_assoc ref board_id,group_id board_id 4 source_forum.board.id 4 Using where
使用的最高行数是56 ...
更新
我的查询:
SELECT
COUNT(id) AS num
FROM (
SELECT topic.*,
(SELECT created FROM post WHERE topic_id = topic.id ORDER BY created DESC LIMIT 1) AS lastpost
FROM topic
WHERE board_id = 6 AND
NOT EXISTS( SELECT id FROM topic_read_assoc WHERE topic_id = topic.id AND member_id = 489 )
) tab
WHERE last_post_time > 1288032259;
解释扩展
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 440 100.00 Using where
2 DERIVED topic ref board_id board_id 4 429 100.00 Using where
4 DEPENDENT SUBQUERY topic_read_assoc ref topic_id,member_id topic_id 4 source_forum.topic.id 6 100.00 Using where
3 DEPENDENT SUBQUERY post index topic_id created 4 NULL 1 1600.00 Using where
过滤意味着什么?
答案 0 :(得分:1)
您是否也可以发布查询和SHOW CREATE TABLE
语句?
58确实不高,但你正在使用临时表和文件库。并且因为你的所有类型都是ref而不是eq_ref,你必须乘以这些值:3 * 2 * 4 * 58 * 16 * 1 * 4 = 89k行连接(参见检查的行 - 一些表可能完全扫描 - 请参阅USING WHERE
评论)
您可以发布EXPLAIN EXTENDED
和SHOW WARNINGS
吗?