Судя по запросу, вам нужно получить последние (по времени) данные по каждому датасорсу. Почему бы не брать периодически (раз в минуту, час, сутки) самый последний timestamp для каждого датасорса и не складывать его данные в другую табличку? И уже по этим (уменьшенным) данным делать ваш запрос. Соотв, объем данных уменьшится, т. е. ваш запрос будет выполняться быстрее. Первичные данные (raw дата) либо в шлак после n месяцев хранения, либо в файлы и на ленту, если они в дальнейшем могут понадобиться.