SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 26.05.2009 12:58:33

thatstheway
Участник
Зарегистрирован: 26.05.2009
Сообщений: 1

Сравните два запроса

Здравствуйте. Такое дело:

Существуют статьи и сущ. темы, на которые эти статьи могут быть (одной статье может быть сопоставлено несколько тем). Есть таблица тем  (A): ид темы и название темы (темы, допустим, такие: музыка, спорт, наука и тп). Есть таблица (B): ид статьи и ид темы -- сопоставление статей и тем. Вот задача: у меня есть ид статьи, мне нужно узнать названия всех тем, которых касается эта статья.

К примеру: A состоит из theme_id, theme_name ; B состоит из theme_id, article_id

Можно делать так: с помощью JOIN присоединить таблицу A к таблице B, затем с помощью WHERE выбрать записи, где ид статьи тот, который нас интересует.
допустим,речь идет о статье с ид=5:
SELECT A.theme_name FROM A RIGHT JOIN B on A.theme_id=B.theme_id WHERE B.article_id=5

А можно так: используя промежуточный запрос выделить с помощью WHERE из таблицы B те записи , где ид статьи тот, который нас интересует, а затем с помощью JOIN присоединить к промежуточному результату таблицу A.
SELECT A.theme_name FROM (SELECT theme_id FROM B WHERE article_id=5) as actual_themes LEFT JOIN A ON actual_themes.theme_id=A.theme_id

Вопрос: есть ли принципиальные отличия в быстроте выполнения этих запросов.

Неактивен

 

#2 26.05.2009 16:24:51

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

Re: Сравните два запроса

А сравнить EXPLAIN и скорость не пробовали? smile

Предположительно первый вариант будет работать чуть-чуть быстрее (из-за того, что не нужно
материализовывать вот эту вот выбранную строку).

Неактивен

 

Board footer

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