У меня есть таблицы в базе данных MySQL, как это ...
CREATE TABLE `someUserTable`
(
userId INT NOT NULL,
.....
PRIMARY KEY(userId),
);
CREATE TABLE `someActivityTable`
(
activityId INT NOT NULL
userId INT,
.....
PRIMARY KEY(activityId),
KEY(userId)
);
И если я хочу найти все действия для пользователя (скажем, «100»), будет ли оно более эффективным для
SELECT *
FROM someUserTable U
LEFT JOIN someActivityTable A ON A.userId = U.userId
WHERE U.userId = 100;
или
SELECT *
FROM someUserTable U
LEFT JOIN
(SELECT * FROM someActivityTable WHERE userId = 100) A ON A.userId = U.userId
WHERE U.userId = 100;
----- ----- Edit
Использование профилировщика скажет мне, что лучше для текущей ситуации. Но меня интересует теория двух запросов.
Чтобы в будущем я мог знать, какой запрос лучше выполнять при разработке.
В противном случае мне нужно знать, пока приложение не будет запущено в производство и база данных не начнет заполняться, прежде чем я смогу выполнить точное профилирование. И к тому времени может быть уже слишком поздно.