Задать вопрос
swanrnd
@swanrnd
Издатель HTML5 игр

Как отсортировать запрос через UNION?

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.
  • Вопрос задан
  • 2809 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@iamnothing
SELECT * FROM (... ваш запрос ...) ORDER BY нужное_поле.
Только не знаю, как с производительностью в этом случае.
Спрошу на всякий случай: а индексирование у вас настроено под ваши нужды?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы