Помогите оптимизировать запрос

SocMaster

Профессор
Регистрация
26 Июл 2011
Сообщения
211
Реакции
49
Есть 3 таких запроса
Код:
$fid = DB::fetch_first('SELECT * FROM '.DB::table('forum_thread')." WHERE tid=".$tid."");
        $fup = $fid['fid'];
        $fids = DB::fetch_first('SELECT * FROM '.DB::table('forum_forum')." WHERE fid=".$fup."");
        $fups = $fids['fup'];
        $names = DB::fetch_first('SELECT * FROM '.DB::table('forum_forum')." WHERE fid=".$fups."");
В конце нужно только $names['name']
Ладно первый запрос, а остальные 2?( Кажется мне что их можно в один засунуть? (не спрашивайте зачем 2:nezn: нужно, структура движка такая)
Подскажите как оптимизировать:rolleyes:
 
Подскажите как оптимизировать:rolleyes:
А зачем их оптимизировать? Особенно два последних - запросы по первичному ключу ведь? Откуда информация, что требуется оптимизация? Тайминги-замеры где?
p.s. Ещё не лишним в таких вопросах будет структуру таблицы приводить (SHOW CREATE TABLE `forum_thread`;)
 
может как-то так:
Код:
SELECT
    *
FROM
    forum_forum,
WHERE
    fid=(
        SELECT
            ff.`fup`
        FROM
            forum_forum ff,
            forum_thread ft
        WHERE
            ff.fid=ft.`fid`
          AND
            ft.tid=".$tid."
        )
 
Для вопроса по оптимизации нужно смотреть Explain команду.
Для того чтобы их засунуть в один, можно склеить джойном таблицы
forum_thread и forum_forum или подзапросом делать, но первый вариент будет проще.
Приведите структуры таблиц, либо дамп с демо данными...

И уберите как минимум звездочки, и укажите конкретные поля в запросе!
 
может как-то так:
Код:
SELECT
    *
FROM
    forum_forum,
WHERE
    fid=(
        SELECT
            ff.`fup`
        FROM
            forum_forum ff,
            forum_thread ft
        WHERE
            ff.fid=ft.`fid`
          AND
            ft.tid=".$tid."
        )

главное чтобы тут подзапрос на каждый кортеж не начал выполняться )
При джойне оптимизатор может уловить ситуацию и более правильно оптимизировать нежели подзапрос...
 
Назад
Сверху