SELECT TOP 50 id, fid, uid, type, val, message FROM sw.dbo.logs WHERE uid=@id or (fid=@id and type=100) ORDER BY id DESC;
Имеем такой запрос. Он выполняется долго.
Есть предложение разбить его на:
SELECT TOP 50 id, fid, uid, type, val, message FROM sw.dbo.logs WHERE uid=@id ORDER BY id DESC;
SELECT TOP 50 id, fid, uid, type, val, message FROM sw.dbo.logs WHERE (fid=@id and type=100) ORDER BY id DESC;
Эти 2 вопроса выполняются гораздо быстрее.
Это логичный шаг, но Union не позволяет использовать ORDER BY в одном из запросов.
(SELECT TOP 50 id, fid, uid, type, val, message FROM sw.dbo.logs WHERE uid=@id ORDER BY id DESC)
UNION ALL
(SELECT TOP 50 id, fid, uid, type, val, message FROM sw.dbo.logs WHERE (fid=@id and type=100) ORDER BY id DESC) ORDER BY id DESC;
Как можно просто решить эту проблему? Не хочется проводить сортировку по id на сервере, хочется решить эту проблему средствами SQL.
Использую MS SQL 2012.