admin

MySQL长查询进度监控

sql

只是为了提出我的问题,我了解没有直接支持这样的事情。我正在寻找的是任何一种变通方法,或者令人费解的推导方法,可以使我得到半数可观的结果。

我正在使用群集引擎处理一个相当大的MySQL群集(表> 4亿行)。

有谁知道一种 直接 通过mysql中的长查询 直接检索
或以其他方式(或更好)得出进度的准确指示的方法吗?我有一些查询可能最多需要45分钟的时间,因此我需要确定处理过程中我们是10%还是90%。

编辑:

根据评论中的要求,这里是导致我提出原始问题的 一个 问题的提炼和概括版本…

SELECT `userId`
FROM    `openEndedResponses` AS `oe`
WHERE
    `oe`.`questionId` = 3 -- zip code
    AND (REPLACE( REPLACE( `oe`.`value`, ' ', '' ), '-', '' ) IN ( '30071', '30106', '30122', '30134', '30135', '30168', '30180', '30185', '30187', '30317', '30004' ));

该查询是针对具有约9500万行的单个表运行的。运行查询需要8秒钟,传输数据又需要13秒钟(总计21秒钟)。考虑到表的大小以及正在使用的字符串操作函数,我想说它运行得非常快。但是,对于用户而言,卡住或闲置仍然是21秒。一些进展的指示将是理想的。


阅读 186

收藏
2021-05-10

共1个答案

admin

就我个人的具体情况而言,到目前为止,似乎还没有真正的解决方案。由于我无法将查询拆分为几个较小的查询,并且事实证明,这种查询select count(*)首先会适得其反,然后再运行“真实”查询(将本来已经很慢的查询的执行时间加倍),所以任何一种解决方法似乎都不可行。也许很快,MySQL将支持类似这样的东西

2021-05-10