以下查询导致我的数据库环境出现巨大的 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);
此索引对
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
——您真的向客户端交付了那么多行吗?铲掉这么多也是一个性能问题。