だから私の専門知識はMySQLにないので、このクエリを書きました。EquipmentDataに100k行、EquipmentDataStagingに30k行(私にとっては非常に少ないデータです)で、5分程度で実行がますます遅くなり始めています。
CREATE TEMPORARY TABLE dataCompareTemp
SELECT eds.eds_id FROM equipmentdatastaging eds
INNER JOIN equipment e ON e.e_id_string = eds.eds_e_id_string
INNER JOIN equipmentdata ed ON e.e_id = ed.ed_e_id
AND eds.eds_ed_log_time=ed.ed_log_time
AND eds.eds_ed_unit_type=ed.ed_unit_type
AND eds.eds_ed_value = ed.ed_value
このクエリを使用して、クライアントデバイスから取得したデータ行をデータベース内にある現在のデータと比較しています。ここから、一時テーブルを取得し、IDを使用して条件付きの決定を行います。私はe_id_string
インデックスを付けました、そして私はe_id
インデックスを付けました、そして他のすべてはそうではありません。このすべての情報を比較しなければならないのはばかげているように見えますが、クライアントシステムは冗長なデータを吐き出しているので、このクエリを使用してそれを見つけています。これに関するあらゆるタイプのヘルプは、SQLまたはMySql Managementによる別のアプローチであるかどうかにかかわらず、非常に高く評価されます。MSSQLでこのようなことを行うと、要求をはるかにうまく処理できるように感じますが、それはおそらく、何かが正しく設定されていないためです。