下面的查询在我的数据库环境中造成了巨大的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);
1条答案
按热度按时间ekqde3dh1#
此索引将对
view_mats
:INDEX(mngy, nonUnixjdjf)
有利。也就是说,对于trip_dsty
:INDEX(mngy, jdjf)
。并且(可能)删除
idx_n1
,因为它只包含该索引的开头。(我并不完全精通Columnstore;上面的建议是针对InnoDB索引的;它可能适用于这里。)
通常,浮点和双精度上的
(m,n)
是无用的,可能会导致舍入错误。double(20,10)
可能应该是普通double
或DECIMAL(20,10)
。LIMIT 10000
——您真的向客户机交付了那么多行吗?铲这么多也是一个性能问题。