Пожалуйста, научите меня писать быстрые запросы!!!
Есть запрос для извлечения последней записи пользователя( у пользователя может быть несколько записей, а может и не быть, но вывести нужно всех пользователей).
Есть две таблицы:
1)Users
-----
id
....
2)recording
-----
id
id_user
record
Мой запрос:
Select * FROM dbo.users
LEFT OUTER JOIN
dbo.recording ON dbo.recording.id =
(SELECT MAX(id) AS Expr11
FROM dbo.recording
WHERE (id_user = dbo.users.id))
Выполняется минуту, для 6000 пользователей, как можно его переделать, чтоб ускорить время выполнения?
Спустя 6 минут, 34 секунды (9.12.2010 - 13:48) sergeiss написал(а):
Индексы есть по полям dbo.recording.id И dbo.users.id?
Спустя 17 минут, 42 секунды (9.12.2010 - 14:05) zvezda_t написал(а):
Цитата |
Индексы есть по полям dbo.recording.id И dbo.users.id? |
нету
Спустя 25 минут, 46 секунд (9.12.2010 - 14:31) sergeiss написал(а):
Ну так сделай!!! Это был не праздный вопрос, а "вопрос-намёк". Для того, чтобы выборки делались быстро, нужны индексы по полям, используемым в этой выборке. И это не единственное, что надо сделать. Но это то, с чего надо начать.
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)