Если у вас древовидное тяжелое меню и по товарам надо делать дополнительные выгрузки - есть вариант сделать рефакторинг архитектуры БД например и не страдать 20+ запросами в БД. ))) Меню и товары - в 99% случаев это по большей степени статика, которая меняется, ну окей... пусть будет даже если 2-3 раза в день, но никак не 100 раз в минуту например. Соответственно в случае, если у вас действительно все прям настолько сложно, что нужно делать овермного запросов на стоковой БД и все это большое и тяжелое - сделайте 2 отдельные таблицы где будете хранить нужные данные в нужном виде и делайте вместо 20-30 запросов - 2 запроса... ))) И обновляйте эти таблицы по триггеру. Да, у нас получается оверхэд по хранению данных и получается, что надо следить за консистентностью, но за то у нас вместо 30 запросов - 2.
Это конечно возможно не идеальное решение, но проблему точно решает.