2010-11-08 101 views
1

我,根據我的慢查詢日誌這是一個有點慢查詢....無法複製慢查詢日誌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 

是什麼意思過濾?

回答

1

你可以發佈查詢和SHOW CREATE TABLE報表嗎?

58確實不高,但是您正在使用臨時表和文件夾。因爲所有的類型都是ref而不是eq_ref,所以你必須將這些值相乘:3 * 2 * 4 * 58 * 16 * 1 * 4 = 89k行加入(參見所檢查的行 - 一些表可能完全掃描 - 參見USING WHERE評論)

你能發佈EXPLAIN EXTENDEDSHOW WARNINGS嗎?

+0

'ref'和'eq_ref'有什麼區別? – Webnet 2010-11-08 21:45:41

+0

@Webnet http://stackoverflow.com/a/1159772/334966 – mattalxndr 2012-03-20 20:48:13