添加排序?yàn)楹螌?dǎo)致查詢速度大幅下降?
問(wèn)題描述:
查詢r(jià)d_pro_inventory_temp表,如果添加ORDER BY t.CREATED_Date DESC子句,查詢時(shí)間從2秒增加到15秒。然而,單獨(dú)查詢r(jià)d_pro_inventory_temp表時(shí),加不加ORDER BY對(duì)查詢速度影響不大。
原因推測(cè):
索引利用與排序成本:
添加ORDER BY子句后,如果該字段上沒(méi)有合適的索引,mysql將進(jìn)行文件排序,即對(duì)整個(gè)結(jié)果集進(jìn)行物理排序。這比不排序時(shí)更費(fèi)時(shí)。
JOIN的影響:
查詢涉及rd_pro_inventory_temp表與子查詢結(jié)果的LEFT JOIN。JOIN操作可能會(huì)大幅增加結(jié)果集,使得隨后的排序操作更復(fù)雜和耗時(shí)。
索引利用率差異:
單獨(dú)查詢r(jià)d_pro_inventory_temp表時(shí),由于數(shù)據(jù)量小,即便CREATED_Date字段沒(méi)有索引,排序也能快速完成。然而,一旦加入JOIN和大結(jié)果集,無(wú)索引排序的成本就會(huì)顯現(xiàn)。
優(yōu)化建議:
索引優(yōu)化:確保rd_pro_inventory_temp表中的CREATED_Date字段有適當(dāng)?shù)乃饕?/p>
JOIN與子查詢分析: 檢查JOIN子查詢的輸出大小,優(yōu)化子查詢邏輯。如果可能,應(yīng)減少或優(yōu)化GROUP_CONCAT函數(shù),以減輕數(shù)據(jù)處理負(fù)載。
查詢執(zhí)行計(jì)劃分析:使用EXPLaiN工具分析查詢執(zhí)行計(jì)劃,確認(rèn)索引是否得到有效使用,以及排序階段的具體執(zhí)行情況。基于此,進(jìn)行有針對(duì)性的優(yōu)化。