Primero un poco más de llamas, luego una solución real ...
Principalmente estoy de acuerdo con las llamas que ya te arrojaron.
No estoy de acuerdo con la normalización clave-valor. Las consultas terminan siendo horribles; rendimiento aún peor.
Una forma 'simple' de evitar el problema inmediato (limitación del número de columnas) es 'particionar verticalmente' los datos. Tener, digamos, 5 tablas con 400 columnas cada una. Todos tendrían la misma clave primaria, excepto que uno podría ser AUTO_INCREMENT.
Quizás sea mejor decidir sobre la docena de campos que son más importantes, ponerlos en la tabla 'principal'. Luego, agrupe los sensores de manera lógica y colóquelos en varias tablas paralelas. Con la agrupación adecuada, es posible que no tenga que UNIRSE a todas las tablas todo el tiempo.
¿Estás indexando alguno de los valores? ¿Necesitas buscar en ellos? ¿Probablemente buscas en fecha y hora?
Si necesita indexar muchas columnas, punt.
Si necesita indexar algunos, colóquelos en la 'tabla principal.
Aquí está la solución real (si corresponde) ...
Si no necesita la gran variedad de sensores indexados, ¡no haga columnas! Si, me escuchaste. En su lugar, recójalos en JSON, comprima el JSON, guárdelo en un campo BLOB. Ahorrará una tonelada de espacio; solo tendrá una tabla, sin problemas de límite de columna; etc. Su aplicación se descomprimirá y luego usará el JSON como estructura. ¿Adivina qué? Puede tener estructura: puede agrupar los sensores en matrices, material multinivel, etc., tal como le gustaría a su aplicación. Otra 'característica' es abierta. Si agrega más sensores, no necesita ALTERAR la tabla. JSON si flexible de esa manera.
(La compresión es opcional; si su conjunto de datos es enorme, ayudará con el espacio en disco, por lo tanto, el rendimiento general).