我試圖使用在多個表上留下連接的查詢來獲取數據。查詢返回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