mysql - 具有多个左连接的查询需要太长时间

时间:2017-07-28 09:23:51

标签: mysql sql mysql-workbench

我正在尝试使用在多个表上保留连接的查询来获取数据。该查询返回4132行,持续时间为4.55秒,在mysql workbench中获取31.30秒。我甚至试图从php执行它,但这需要相同的时间。

SELECT
                aa.bams_id AS chassis_bams_id, aa.hostname AS chassis_hostname, 
    aa.rack_number AS chassis_rack, aa.serial_number AS chassis_serial, aa.site_id AS chassis_site_id,
    cb.bay_number, cb.bsn AS serial_number_in_bay,
CASE
                WHEN a_a.bams_id IS NULL THEN 'Unknown'
                ELSE a_a.bams_id
END AS blade_bams_id,
                a_a.hostname AS blade_hostname, a_s.description AS blade_status, a_a.manufacturer AS blade_manufacturer, a_a.model AS blade_model,
                a_a.bookable_unit_id AS blade_bookable_unit_id, a_a.rack_number AS blade_rack_number, a_a.manufactured_date AS blade_manufactured_date,
                a_a.support_expired_date AS blade_support_expired_date, a_a.site_id AS blade_site_id
FROM all_assets aa
                LEFT JOIN manufacturer_model mm ON aa.manufacturer = mm.manufacturer AND aa.model = mm.model
                LEFT JOIN chassis_bays cb ON aa.bams_id = cb.chassis_bams_id
                LEFT JOIN all_assets a_a ON cb.bsn = a_a.serial_number
                LEFT JOIN asset_status a_s ON a_a.status=a_s.status
WHERE mm.hardware_type = 'chassis';

这些是正在使用的表的定义:

enter image description here

EXPLAIN的输出:

enter image description here

查询获取每个机箱中每个刀片的数据。 在其他系统上执行相同的查询,只需5秒即可获取结果。

如何优化此查询?

更新(已解决)

根据专家建议添加索引。 以下是添加索引后的执行计划。

enter image description here

1 个答案:

答案 0 :(得分:1)

创建索引,非索引读取比索引读取慢。

要准确确定导致性能下降的原因,最好的工具 是使用“查询计划分析器”:

看看这里: mySql performance explain

尝试在将要发生的最明显的读取上创建索引。查看加入时起作用的字段以及where子句。如果您在这些字段上有索引,那么如果正在进行非索引读取,则性能会提高。

如果这仍然是一个问题,最好看看mySQL是如何获取数据的, 有时重组你的数据,甚至可能改变你排队的方式 可以给你更好的结果。

例如。创建索引:aa.manufacturer_model,aa.manufacturer,aa.model和mm.hardware_type