以下查詢導致我的資料庫環境出現巨大的 CPU 使用率和高延遲。 我嘗試使用不同類型的索引來提高查詢效能,但不幸的是任何索引都無助於提高效能。有沒有建議重寫查詢以獲得相同的結果。
query SELECT kln.qsw, kln.mngy FROM ( SELECT kln2.mngy, MAX(kln2.nonUnixjdjf) dm_hj FROM mfh.view_mats kln2 WHERE kln2.jdjf <= '2022-10-19 10:47:25.000000' GROUP BY kln2.mngy ) pun_ghky JOIN pun_ghky.mngy = kln.mngy);
P粉6100288412024-01-11 14:18:51
此索引對 view_mats
有益:INDEX(mngy, nonUnixjdjf)
。也就是說,對於 trip_dsty
:INDEX(mngy, jdjf)
。
並且(可能)刪除idx_n1
,因為它只包含該索引的開頭。
(我並不完全精通列存儲;上面的建議是針對 InnoDB 索引;它可能適用於此。)
一般來說,Float 和 Double 上的 (m,n)
是無用的,並且可能導致舍入錯誤。 double(20,10)
可能應該是普通的 double
或 DECIMAL(20,10)
。
LIMIT 10000
—您真的向客戶端交付了這麼多行嗎?鏟掉這麼多也是效能問題。