Prima un po 'più di fuoco, poi una vera soluzione ...
Sono per lo più d'accordo con le fiamme già lanciate contro di te.
Non sono d'accordo con la normalizzazione dei valori-chiave. Le domande finiscono per essere orribili; prestazioni anche peggiori.
Un modo "semplice" per evitare il problema immediato (limitazione del numero di colonne) è "partizionare verticalmente" i dati. Hanno, diciamo, 5 tavoli con 400 colonne ciascuno. Avrebbero tutti la stessa chiave primaria, tranne uno potrebbe essere AUTO_INCREMENT.
Forse sarebbe meglio decidere sulla dozzina di campi più importanti, metterli nella tabella "principale". Quindi raggruppare i sensori in modo logico e inserirli in diverse tabelle parallele. Con il corretto raggruppamento, potrebbe non essere necessario UNIRE tutti i tavoli in ogni momento.
Stai indicizzando qualcuno dei valori? Hai bisogno di cercarli? Probabilmente cerchi su datetime?
Se devi indicizzare molte colonne - punt.
Se devi indicizzarne alcuni, inseriscili nella tabella principale.
Ecco la vera soluzione (se applicabile) ...
Se non hai bisogno della vasta gamma di sensori indicizzati, allora non creare colonne! Sì, mi hai sentito. Invece, raccoglili in JSON, comprimi il JSON, memorizzalo in un campo BLOB. Risparmierai un sacco di spazio; avrai una sola tabella, senza problemi di limite di colonna; ecc. L'applicazione verrà decompressa e quindi utilizzerà JSON come struttura. Indovina un po? Puoi avere una struttura: puoi raggruppare i sensori in array, elementi multilivello, ecc., Proprio come vorrebbe la tua app. Un'altra "caratteristica" - è a tempo indeterminato. Se aggiungi più sensori, non è necessario modificare la tabella. JSON se flessibile in questo modo.
(La compressione è facoltativa; se il tuo set di dati è enorme, ti aiuterà con lo spazio su disco, quindi le prestazioni complessive.)