Đầu tiên là một vài ngọn lửa, sau đó là một giải pháp thực sự ...
Tôi chủ yếu đồng ý với ngọn lửa đã ném vào bạn.
Tôi không đồng ý với chuẩn hóa khóa-giá trị. Truy vấn cuối cùng là khủng khiếp; hiệu suất thậm chí còn tồi tệ hơn.
Một cách 'đơn giản' để tránh sự cố tức thời (giới hạn số lượng cột) là 'phân vùng theo chiều dọc' dữ liệu. Có, nói, 5 bảng với 400 cột mỗi. Tất cả chúng đều có cùng khóa chính, ngoại trừ một khóa có thể là AUTO_INCREMENT.
Có lẽ tốt hơn là quyết định hàng tá lĩnh vực quan trọng nhất, đặt chúng vào bảng 'chính'. Sau đó nhóm các cảm biến theo một cách hợp lý và đặt chúng vào một số bảng song song. Với việc phân nhóm thích hợp, bạn có thể không phải THAM GIA tất cả các bảng mọi lúc.
Bạn đang lập chỉ mục bất kỳ giá trị? Bạn có cần phải tìm kiếm trên chúng? Có lẽ bạn tìm kiếm trên datetime?
Nếu bạn cần lập chỉ mục nhiều cột - punt.
Nếu bạn cần lập chỉ mục một vài - hãy đặt chúng vào 'bảng chính.
Đây là giải pháp thực sự (nếu áp dụng) ...
Nếu bạn không cần một loạt các cảm biến được lập chỉ mục, thì đừng tạo cột! Vâng, bạn đã nghe tôi. Thay vào đó, hãy thu thập chúng vào JSON, nén JSON, lưu trữ nó vào trường BLOB. Bạn sẽ tiết kiệm được một tấn không gian; bạn sẽ chỉ có một bảng, không có vấn đề giới hạn cột; v.v. Ứng dụng của bạn sẽ giải nén và sau đó sử dụng JSON làm cấu trúc. Đoán xem cái gì? Bạn có thể có cấu trúc - bạn có thể nhóm các cảm biến thành các mảng, công cụ đa cấp, v.v., giống như ứng dụng của bạn muốn. Một "tính năng" khác - đó là kết thúc mở. Nếu bạn thêm nhiều cảm biến, bạn không cần THAY ĐỔI bảng. JSON nếu linh hoạt theo cách đó.
(Nén là tùy chọn; nếu tập dữ liệu của bạn rất lớn, nó sẽ giúp dung lượng đĩa, do đó hiệu suất tổng thể.)