记一次解决MYSQL占用CPU100%的问题


有张表50W条数据,今天写了个JOB每隔10秒对其进行分组查询并获取每组的第一条数据。

select 
    (
        select KVARH_Total 
        from e_monitorhours 
        where MobusId=a.MobusId
        order by Id DESC
        limit 1
    ) as KVARH_Total
from e_monitorhours as a
where 1=1 and MobusId not in (51,52,53)
group by a.MobusId

数据量小的时候还没问题,但是当达到几十万的时候,CPU100%。当然一开始是不知道的。

后来在网上搜索说执行:

show full processlist

可以看到性能差的SQL语句,然后在info字段里面果断找到。

因为MobusId没加索引,只要给其加上索引即可。

 


 

空条件下查询千万级数据总数的方法:

select TABLE_ROWS from information_schema.`TABLES` 
WHERE table_schema='数据库名称' and TABLE_NAME = '表名';

经过证实,这种方法查出来的结果是不对的。跟实际Count的数量不一致。原因可百度下。 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM