¿Deberíamos hacer nuestros cálculos en la vista, o en el controlador, o en un procedimiento almacenado o en el modelo?

Iría por procedimientos almacenados, por la sencilla razón de que serán los más rápidos. El uso de un procedimiento almacenado significa que todo el cálculo se realiza dentro del servidor de la base de datos donde todos los datos ya están disponibles, por lo que no se transfieren datos a través de la red (en comparación con si está haciendo cálculos en la vista o el controlador).

El RDBMS compilará un plan de ejecución para el procedimiento almacenado de antemano y ya conocerá la ruta de ejecución más rápida para él, por lo que cada vez que llame al procedimiento almacenado, el RDBMS puede devolverle rápidamente los resultados calculados en un ciclo. Compare esto con las consultas en ejecución desde la vista o el controlador, donde cada vez que el RDBMS lo considerará como una nueva consulta y, en consecuencia, tendrá que generar el plan de ejecución cada vez (a menos que esté usando declaraciones preparadas, pero no son del todo igual que los procedimientos almacenados). Luego, los conjuntos de resultados se devolverán al cliente (es posible que los datos tengan que enviarse a través de la red y también pueden ser enormes), el cliente puede realizar el cálculo o puede solicitar más datos a la base de datos. Todo resultará en demasiados ciclos entre el cliente y el servidor de la base de datos y consumirá mucho tiempo. En un sistema de alto tráfico, no desea mantener su servidor de base de datos ocupado de esta manera, por lo que desde el punto de vista de la escalabilidad también tiene sentido usar procedimientos almacenados.