MySQL:提高子选择查询的效率

时间:2017-11-25 22:15:28

标签: mysql sql performance subquery

我有一组(MySQL)表,如下所示。我需要根据匹配的型号/序列号检索故障单列表,以及任一设备表中匹配设备的ID。

请注意,两个设备表中的型号/序列号组合 应该是唯一的,但型号/序列号输入框是自由格式的,因此用户可以输入相同的型号/系列两次。在这种情况下,检索哪个设备单元并不重要,但每张票只返回结果,因为我们显示的是票证列表,而不是设备。

'票' [麻烦票表]

  • id [index]
  • 型号[设备型号]
  • serial [设备序列号]
  • ...... etc

user_equipment [用户设备表]

  • id [index]
  • 型号[设备型号]
  • serial [设备序列号]
  • ...... etc

site_equipment [现场设备]

  • id [index]
  • 型号[设备型号]
  • serial [设备序列号]
  • ...... etc

目前,我使用子查询返回用户和网站设备ID,但性能非常差:

SELECT tickets.*, ... other tables/columns here,
   (SELECT id FROM user_equipment WHERE model = tickets.model AND serial = tickets.serial LIMIT 1) as user_equipment_id,
   (SELECT id FROM site_equipment WHERE model = tickets.model AND serial = site_equipment.serial LIMIT 1) as site_equipment_id
FROM
  tickets
  ... other joins here
WHERE ... 
HAVING ... 
ORDER BY ...
LIMIT ...

我非常感谢有关改进此查询性能的任何建议。遗憾的是,由于许多其他依赖性,此时更改表结构不是一种选择。

谢谢!

1 个答案:

答案 0 :(得分:2)

您想要索引:

  • user_equipment(model, serial, id)
  • site_equipment(model, serial, id)

前两列可以按任意顺序排列。