Antes que te metas en algo relativamente complicado como lo es sharding u otros tipos de horizontal partitioning yo te recomendaría que empezaras por indexar correctamente tus campos. MySQL soporta horizontal partitioning, pero va a depender de como estan compuestos tus campos y como haces las queries.
Eso es cierto. Lo primero son los índices, ten en cuenta que no hablamos de las primary keys, hablamos de otra cosa, aunque consultes con un campo tipo date puedes hacer indices de esos campos. Consúltalo y verás.
Lo de particionar las tablas se puede automatizar de alguna manera? Es decir, imagina que me aya olvidado de generar la tabla para "noviembre" manualmente, sería desastroso, un crash terrible si es que comienza a usar una tabla que no existe.
Esto es relativamente fácil. Puedes crear, por programación, las tablas del mes en el mismo momento que vayas a insertar la fila y el mes no exista.
Eso si, haz una nomenglatura razonable y que te dure tiempo, no pongas "noviembre".
Tu caso es mas típico de lo que crees. PHP es un lenguaje fácil de aprender pero también fácil de aprender malas costumbres.