BRat
o_0
Тормозящий запрос в IPB
Есть в IPB такая штука как экспорт RSS. Запрос такой -
[sql]
SELECT p.*, t.tid, t.title as topic_title, t.starter_name as topic_starter_name, t.forum_id FROM inv_posts p, inv_topics t WHERE p.topic_id = t.tid AND t.forum_id IN( 40 ) AND t.state != "link" AND t.approved=1 ORDER BY p.pid desc LIMIT 0,10;
[/sql]
Запрос на 200 000 постах и 200 топиках выполняется около 10 секунд
EXPLAIN:
При ловле проблемы довел запрос до такого вида -
[sql]
SELECT * FROM inv_posts p
LEFT JOIN inv_topics t
ON p.topic_id=t.tid
WHERE t.forum_id = 40
ORDER BY p.pid desc LIMIT 0,10;
[/sql]
Если убрать условие WHERE - тормозить перестает (0,02 сек). Если оставить WHERE и убрать ORDER - тоже не тормозит.
Запрос я конечно переразобью на два, чтобы не было джойна, но кто-нибудь может меня просветить, почему происходит то, что происходит? Почему тормозит?
Есть в IPB такая штука как экспорт RSS. Запрос такой -
[sql]
SELECT p.*, t.tid, t.title as topic_title, t.starter_name as topic_starter_name, t.forum_id FROM inv_posts p, inv_topics t WHERE p.topic_id = t.tid AND t.forum_id IN( 40 ) AND t.state != "link" AND t.approved=1 ORDER BY p.pid desc LIMIT 0,10;
[/sql]
Запрос на 200 000 постах и 200 топиках выполняется около 10 секунд
EXPLAIN:
Код:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t ref PRIMARY,forum_id,last_post,state,approved,forum_id... forum_id_state_approved 2 const 175 Using where; Using temporary; Using filesort
1 SIMPLE p ref topic_id topic_id 4 u24710_forum.t.tid 36
[sql]
SELECT * FROM inv_posts p
LEFT JOIN inv_topics t
ON p.topic_id=t.tid
WHERE t.forum_id = 40
ORDER BY p.pid desc LIMIT 0,10;
[/sql]
Если убрать условие WHERE - тормозить перестает (0,02 сек). Если оставить WHERE и убрать ORDER - тоже не тормозит.
Запрос я конечно переразобью на два, чтобы не было джойна, но кто-нибудь может меня просветить, почему происходит то, что происходит? Почему тормозит?