Как правильно разделить работу СУБД и PHP?
Есть очень простой принцип.
СУБД - это подсистема, которая хранит и извлекает данные, а приложение (на PHP или на чем угодно) - их обрабатывает и модиифицирует, если нужно.
СУБД архитектурно (и физически) "ближе" к данным. Одна из важнейших задач СУБД -
выбрать из всего объема БД только
нужные сейчас данные. Именно на уровне СУБД нужно производить максимум фильтраций. У нее есть все нужное для этого - индексы и прочие хитрые структуры данных.
Однако, чтобы СУБД лучше выполняла свои основные задачи, не стоит нагружать ее лишней вычислительной работой. Все, что не связано с поддержанием целостности и согласованности данных, отдают на уровень приложения - тогда эти вычисления (куда относятся, к примеру, подготовка JSON-ответов или сборка web-страницы по шаблону) можно выполнить логически и физически на других узлах, что влечет за собой очевидные преимущества.
Поэтому вывод такой: выбирайте как можно меньше записей и столбцов/атрибутов в запросе к БД (т.е., например, никаких * в плановых запросах), и делайте как можно больше работы с ними на уровне приложения (настолько, насколько удается соблюдать требуемые гарантии целостности).
Под "как можно меньше записей" я имею в виду делать запрос максимально конкретным и узконаправленным, но достаточным для выполнения текущей задачи.