无法复制慢查询日志 rows_examined
我有一个查询,根据我的慢速查询日志,它有点慢......
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
过滤是什么意思?
I have a query that according to my slow query log it's a bit slow....
Query_time: 8.408943 Lock_time: 0.000119 Rows_sent: 1 Rows_examined: 2911766
BUT, when I run the query with EXPLAIN
in front of it, I don't get the same results...
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
The highest row count there being used is 56...
update
My query:
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;
explain extended
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
What does filtered mean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您也可以发布查询和 SHOW CREATE TABLE 语句吗?
58 确实不高,但是您正在使用临时表和文件排序。由于所有类型都是 ref 而不是 eq_ref,因此您必须将这些值相乘: 3*2*4*58*16*1*4 = 89k 行连接(请参阅检查的行 - 有些表可能已完全扫描 - 请参阅
USING WHERE
评论)您可以发布
EXPLAIN EXTENDED
和SHOW WARNINGS
吗?Can you post the query and the
SHOW CREATE TABLE
statements too?58 indeed is not high, but you are using temporary tables AND a filesort. And since all your types are ref and not eq_ref, you have to multiply those values: 3*2*4*58*16*1*4 = 89k rows joined (see the rows examined - some tables probably got scanned entirely - see the
USING WHERE
comment)Can you post an
EXPLAIN EXTENDED
andSHOW WARNINGS
?