Если "поглубже ковырять палочкой" в то как работает SQL и познать профилирование запросов, планы исполнения, блокировки, применение индексов и временных таблиц - можно городить очень весёлые конструкции.
Но вообще надо помнить - конструкция DISTINCT - это одна из очень "тяжёлых" инструкций, которая потенциально может просаживать скорость работы SQL в разы. Особенно, если DISTINCT по всем полям и их много в запросе. И ещё до кучи без индексов те, что вроде не в отборе... Построение индексов - это вообще отдельный вид искусства. Могу для примера сказать, что просто изменение структуры индексов (проиндексированы все те же поля остались и все поля типов INT/BIGINT) на таблице всего в 20млн. строк изменили время выполнения чуть сложноватого запроса с примерно 20-25 секунд до 0,1-0,2 секунды (это из практики на одном из проектов)