有張表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的數量不一致。原因可百度下。