各位大佬,請幫忙檢查下SQL哪里有問題。非常感謝!!
增加最后一張表的執行時間是 7s, 不關聯最后一張表的執行時間是 0.6s, 相差 10 倍
最后一張表的資料量是:1.2w
SELECT Bus_TransferData.*,Bus_TransferData.F_Unit AS F_UnitId
FROM Bus_TransferData
INNER JOIN Bus_TransferInfo ON Bus_TransferInfo.F_Id=Bus_TransferData.F_TransferId
LEFT JOIN Bus_DesignTask ON Bus_TransferData.F_TaskId=Bus_DesignTask.F_Id
LEFT JOIN Bus_Project ON Bus_Project.F_Id=Bus_TransferData.F_ProjectId
LEFT JOIN bus_projectbom ON Bus_DesignTask.F_BomId=bus_projectbom.F_Id
LEFT JOIN Bus_PartInfo ON Bus_TransferData.F_PartId=Bus_PartInfo.F_Id
LEFT JOIN Bus_PartInfo g ON Bus_TransferData.F_EquipmentId=g.F_Id
LEFT JOIN bus_rawinfo_test ON Bus_TransferData.F_RawId = bus_rawinfo_test.F_Id
uj5u.com熱心網友回復:
1. 欄位 bus_rawinfo_test.F_Id 上有沒有索引?2. 最終的結果有多少?可不可以用分頁(LIMIT)?
uj5u.com熱心網友回復:
首先,您是最后LEFT JOIN的Bus_TransferData,而前邊有好多地方用到了Bus_TransferData,這樣的寫法,應該會報錯。另外,您可以看看業務邏輯上,是否可以把LEFT JOIN改成JOIN,改完以后,應該會有提升。
再就是在使用的欄位上,增加索引。
uj5u.com熱心網友回復:
LEFT JOIN bus_rawinfo_test ON Bus_TransferData.F_RawId = bus_rawinfo_test.F_Id,在bus_rawinfo_test.F_Id要有索引,而且執行計劃要用到這個索引,也就是說,不能有型別轉換,字符集不匹配等因素導致索引時效;uj5u.com熱心網友回復:
調優的關鍵是看執行計劃,可否發下執行計劃?謝謝。
uj5u.com熱心網友回復:
從”增加最后一張表的執行時間是 7s, 不關聯最后一張表的執行時間是 0.6s”,可知道最后一張表的關聯的欄位沒有索引,或不是唯一索引,或存在大量的默認值被多次關聯。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/45031.html
標籤:MySQL
下一篇:哪個大神幫忙解決一下
