0

所以我的专长不是 MySQL,所以我写了这个查询,它开始运行越来越慢,在 EquipmentData 中有 100k 行,在 EquipmentDataStaging 中有 30k 左右(这对我来说是非常少的数据):

   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 管理的不同方法,任何类型的帮助都将不胜感激。我觉得当我在 MSSQL 中执行此类操作时,它可以更好地处理请求,但这可能是因为我的某些设置不正确。

4

1 回答 1

1

提示

  • 索引所有使用 withONWHEREcondition 的必要列,您需要索引eds_ed_log_time, eds_e_id_string, eds_ed_unit_type, eds_ed_value, ed_e_id, ed_log_time, ed_unit_type,ed_value

  • 将语法更改为SELECT STRAIGHT JOIN...see more reference

于 2012-07-05T04:38:25.617 回答