ここで見つけたのと同じ問題があります
MySQL-構造は同じでデータが異なる複数のテーブルからデータを選択します。
構造は同じでデータが異なる多くのMySQLテーブルからデータを選択する必要があります(table_0、table_1、table_2などをtable_5に分割して、数百万のデータレコードを配布します)。
各デバイスのデータレコードを生成するハードウェアは、タイムスタンプフィールドに従ってテーブルからテーブルに移動します。これは一意ではありません。たとえば、table_0の50レコードのタイムスタンプは同じである可能性があります。データがtable_5の最後に到達すると、table_0に戻り、そこでデータの上書きを開始します。時間範囲内で各デバイスのデータを取得する必要があります。
各テーブルのデータ列(table_0、table_1 ...からtable_5まで):
timestamp, robotGroupID, robotID, sensor1, sensor2, sensor3, ... (many of them)
ただし、テーブルは巨大であり、UNION ALL(DISTINCTよりも高速に読み取ります)は、6はもちろん、2つのテーブルでも、実行に永遠にかかります。たとえば、以下の2つのテーブルについて説明します。
PHPでのMySQLステートメント:(センサー1、センサー2、センサー3のみを示しています)
(SELECT sensor1, sensor2, sensor3 FROM table_0 WHERE robotID=".$robotID." AND timestamp BETWEEN ".$timeStampStart." AND ".$timeStampStop)
UNION ALL
(SELECT sensor1, sensor2, sensor3 FROM table_1 WHERE robotID=".$robotID." AND timestamp BETWEEN ".$timeStampStart." AND ".$timeStampStop)
注意:テーブル名を除いて、まったく同じクエリです。時間範囲内のロボットのセンサーデータは、一度に1つ、1つ、または複数のテーブルにまたがることがあります。
各時間範囲内のロボットからのレポート数を事前に知ることができないため、LIMITを使用できません。会社のデータベースへの読み取り専用アクセスしか持っていないMERGESTORAGEENGINEcosを使用できません。
クエリを実行する前に、各テーブルでcount(robotID)などを使用して確認することを考えていますが、このcosの使い方がわかりません。私はかなりの初心者です。
図よりも列が多いので、6つのテーブルともっと多くの列でこれをより速く動作させるにはどうすればよいと思いますか?前もって感謝します!