MySQL如何有效地比较表之间的多个字段?

时间:2012-07-05 02:52:40

标签: mysql

所以我的专业知识不在MySQL中,所以我编写了这个查询,它开始变得越来越慢,因为在5分钟左右,在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 Management,它都是一种不同的方法。我觉得当我在MSSQL中做这样的事情时它会更好地处理请求,但这可能是因为我设置错误。

1 个答案:

答案 0 :(得分:1)

TIPS

  • 索引与ONWHERE条件一起使用的所有必要列 在这里,您需要索引eds_ed_log_timeeds_e_id_stringeds_ed_unit_typeeds_ed_valueed_e_ided_log_timeed_unit_type,{{1 }}

  • 将语法更改为ed_value ... see more reference