我在 Centos 7 和 Centos 8 上使用 MySQL 8,并且在 27GB 表上运行一个简单的计数语句。通常,在 MySQL 5.7 中大约需要 10 秒,但在 MySQL 8 中,大约需要 10 分钟。我发现每当运行这个命令时,我的磁盘 IO 就会卡到 100%。有没有运气
SELECT COUNT(*) FROM test.logs_sync
事实上问题已经在下面的解决方法中修复,现在只需要 5 秒
SELECT COUNT(*) FROM test.logs_sync where id>0;
我怀疑第一个查询是通过读取整个表来执行的,第二个查询是通过读取索引来执行的。 (假设所有行的 id>0 ofcoz。)
您可以尝试运行“分析表 test.logs_sync”并查看是否会更改查询优化器执行计划。
在运行该声明之前采取通常的预防措施,因为计划可能会受到不利影响。此外,结果可能是“持久的”,也可能不是“持久的”,或者根据设置定期重新计算。
爱好者方法将在 ANALYZE 语句之前对两个查询运行 EXPLAIN 语句。