我试图使用在多个表上留下连接的查询来获取数据。查询返回4132行,需要4.55秒的持续时间,在mysql workbench
中获取31.30秒。我甚至试图从php
执行它,但需要相同的时间。mysql - 具有多个左连接的查询需要的时间太长
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';
这些是被使用表的定义:
的EXPLAIN
输出:
查询在每个机箱取出每个叶片的数据。 在其他系统上执行相同的查询,只需5秒即可获取结果。
如何优化此查询?
更新(解决)
新增指标由专家在这里建议。 下面是添加索引后的执行计划。
运行'EXPLAIN';将索引添加到连接列。 –
@TimBiegeleisen增加了'EXPLAIN'的结果。 – Valay
这不是“表格的定义”,它是表格中列出属性的东西的屏幕截图。这里有很多关于缓慢的mysql查询的帖子 - 请阅读其中的一些内容,注意哪些是downvoted和关闭的,哪些是upvoted和回答,如果你仍然无法解决问题你自己将你学到的东西应用于你的问题。 – symcbean