SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.01.2009 18:44:42

Sky
Участник
Откуда: Астана
Зарегистрирован: 26.01.2009
Сообщений: 7

оператор EXPLAIN, непонятки)))

Здравствуйте... у меня есть запрос:

SELECT tf. * , tt. * , tu.user_id, user_name, MAX( tp.post_id ) AS last_id, COUNT( tp.post_id ) AS count_posts
FROM rusfusionmodsf_forums tf
INNER JOIN rusfusionmodsf_threads tt
USING ( forum_id )
INNER JOIN rusfusionmodsf_posts tp
USING ( thread_id )
INNER JOIN rusfusionmodsf_users tu ON tt.thread_lastuser = tu.user_id
WHERE forum_access =0
GROUP BY thread_id
ORDER BY thread_lastpost DESC
LIMIT 0 , 10


он очень грузит сервер и выполняется больше секунды

запрос с EXPLAIN:
EXPLAIN SELECT tf. * , tt. * , tu.user_id, user_name, MAX( tp.post_id ) AS last_id, COUNT( tp.post_id ) AS count_posts
FROM rusfusionmodsf_forums tf
INNER JOIN rusfusionmodsf_threads tt
USING ( forum_id )
INNER JOIN rusfusionmodsf_posts tp
USING ( thread_id )
INNER JOIN rusfusionmodsf_users tu ON tt.thread_lastuser = tu.user_id
WHERE forum_access =0
GROUP BY thread_id
ORDER BY thread_lastpost DESC
LIMIT 0 , 10


выдает следующее
id     select_type     table     type     possible_keys     key     key_len ref                                         rows     Extra
1    SIMPLE    tp    ALL    thread_id    NULL                NULL    NULL                                        18671    Using temporary; Using filesort
1    SIMPLE    tt    eq_ref    PRIMARY    PRIMARY    2    allfusion_sfroot.tp.thread_id        1    
1    SIMPLE    tu    eq_ref    PRIMARY    PRIMARY    2    allfusion_sfroot.tt.thread_lastuser    1    
1    SIMPLE    tf    eq_ref    PRIMARY    PRIMARY    2    allfusion_sfroot.tt.forum_id        1    Using where

помогите разобраться что к чему!

Неактивен

 

#2 29.01.2009 19:57:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: оператор EXPLAIN, непонятки)))

Попробуйте переписать это через явные подзапросы - вряд ли Вам нужно вытаскивать
все данные, чтобы потом выбрать 10 последних. Может быть, даже стоит сделать в два
независимых запроса - сначала вытащить id интересующих тредов, а потом к ним уже
остальные данные присоединить.

Неактивен

 

#3 30.01.2009 04:47:18

Sky
Участник
Откуда: Астана
Зарегистрирован: 26.01.2009
Сообщений: 7

Re: оператор EXPLAIN, непонятки)))

Спасибо, попробую!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson