Вот тут
http://catalog.mista.ru/public/326983/ разные варианты рассмотрены. Хотя в статье акцент сделан на ТЗ в памяти, про запросы тоже говорится. Там есть вариант, который еще не упоминался, но который также стоит рассмотреть, если поставить задачу максимального быстродействия. Это объединение таблиц с последующей группировкой.