Мне надо получить все записи из таблицы с TopMsgID=NULL, отсортированные, в случае, если ответов на сообщение нет, то по своим AddDate, иначе по AddDate ответов на сообщение (у которых TopMsgID=MsgID этой записи).
Запрос такого образца:
Код: Выделить всё
SELECT A.MsgID, A.AddDate
FROM Table1 A, Table1 B
WHERE A.topmsgid IS NULL AND B.TopMsgID=A.MsgID
ORDER BY (CASE WHEN B.TopMsgID IS NULL THEN A.AddDate ELSE B.AddDate END) DESC
А такой запрос:
Код: Выделить всё
SELECT A.MsgID, A.AddDate
FROM Table1 A
WHERE A.topmsgid IS NULL
ORDER BY COALESCE((SELECT Max(AddDate) FROM Table1 B WHERE B.TopMsgID=A.MsgID), A.AddDate) DESC
3s 750ms, а 8150 записей - 8m 27s 281ms

Как-то можно это оптимизировать?