У меня есть сложный SQL запрос с вложенными «подзапросами», что я хочу, чтобы оптимизироватьнужна помощь оптимизации MySQL запроса
SELECT
'likes' `type`,
entry_date item_date,
CASE `type`
WHEN 'entry_id' THEN entry_id
WHEN 'member_id' THEN f.member_id
WHEN 'topic_id' THEN entry_id
END
AS item_id,
CASE `type`
WHEN 'entry_id' THEN (SELECT title FROM exp_weblog_titles WHERE entry_id=item_id)
WHEN 'member_id' THEN (SELECT screen_name FROM exp_members WHERE member_id=item_id)
WHEN 'topic_id' THEN (SELECT title FROM exp_forum_topics WHERE topic_id=item_id)
END
AS item_title,
CASE `type`
WHEN 'member_id' THEN (SELECT username FROM exp_members WHERE member_id=item_id)
ELSE ''
END
AS item_url_title,
f.type parent_type,
CASE `type`
WHEN 'entry_id' THEN (SELECT weblog_id FROM exp_weblog_titles WHERE entry_id=item_id)
WHEN 'member_id' THEN ''
WHEN 'topic_id' THEN (SELECT forum_id FROM exp_forum_topics WHERE topic_id=item_id)
END
AS parent_id,
CASE `type`
WHEN 'entry_id' THEN ''
WHEN 'member_id' THEN ''
WHEN 'topic_id' THEN (SELECT forum_name FROM exp_forums WHERE forum_id=parent_id)
END
AS parent_title,
m.member_id actor_member_id,
screen_name actor_screen_name,
username actor_username,
photo_filename actor_photo,
avatar_filename actor_avatar
FROM exp_favorites f, exp_members m
WHERE f.member_id=m.member_id
Как вы можете заметить, в подзапросах некоторых таблицы опрашиваются несколько раз для одной и той же строки, но другое поле.
Мол, у меня есть
SELECT screen_name FROM exp_members WHERE member_id=item_id
и
SELECT username FROM exp_members WHERE member_id=item_id
который я доживу до сочетании с mimize количество reuests и нагрузки на сервер.
Есть ли способ сделать это? Какие-нибудь советы?
UPD. Структура таблицы выглядит следующим образом:
CREATE TABLE exp_favorites
(
favorites_id
INT (10) без знака NOT NULL AUTO_INCREMENT,
type
VARCHAR (16) NOT NULL по умолчанию 'entry_id',
author_id
INT (10) без знака NOT NULL по умолчанию «0 »,
entry_id
INT (10) без знака NOT NULL, то
member_id
INT (10) NOT NULL без знака,
site_id
SMALLINT (3) без знака NOT NULL по умолчанию '1',
entry_date
INT (10) ип подписал NOT NULL,
notes
текст NOT NULL,
public
полукокса (1) NOT NULL по умолчанию 'у',
PRIMARY KEY (favorites_id
)
KEY author_id
(author_id
)
KEY entry_id
(entry_id
),
КЛЮЧ member_id
(member_id
),
КЛЮЧ site_id
(site_id
),
КЛЮЧ public
(public
),
KEY type
(type
)
)
Вы можете оставить структуру таблицы здесь? Нормализована ли ваша база данных? –
обновил сообщение с информацией о структуре таблицы. Я не очень разбираюсь в нормализации, но мне кажется, что это нормально. –