SELECT count(*) FROM `t_order_old`
二十九万条数据要13秒多,是不是有点久?这个语句也没办法优化了吧?
MySQL 统计二十九万条数据需要13.96秒确实不是一个理想的性能表现。但是否“正常”取决于多个因素,如硬件性能、数据库设计、索引结构、查询优化、当前的系统负载等。
对于SELECT count(*) FROM t_order_old
这样的查询,以下是一些建议和优化措施:
COUNT(*)
操作,MySQL通常不使用索引(因为它需要计算所有行),但确保其他查询的索引是存在的并且维护良好的。SHOW TABLE STATUS
来获取表的近似行数。SHOW TABLE STATUS LIKE 't_order_old';
查看返回的Rows
列。
EXPLAIN
关键字来查看MySQL如何执行你的查询,并找出可能的瓶颈。EXPLAIN SELECT count(*) FROM t_order_old;
OPTIMIZE TABLE
命令来重新组织表和索引,以及定期清理旧数据和不必要的数据。最后,对于SELECT count(*) FROM t_order_old
这样的查询,如果表中有很多行并且性能是一个问题,那么通常没有太多的优化空间,除了上述建议之外。但是,确保你已经尝试了所有的基本优化步骤,并且考虑了硬件和配置因素。
3 回答1.7k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
3 回答1.6k 阅读
2 回答982 阅读✓ 已解决
count(*)
这种东西还是尽量别用,就算你折腾一下1秒内出了结果,但是加上条件、以后数据量更大的时候一样出问题。不如把需要的统计结果单独存一下,在更新时同步维护统计数据就行了。懒得写代码的话就mysql里面直接挂触发器,比较省心(也避免业务逻辑复杂化)。
典型用例就是文章的回复数量字段,取这个值明显比每次都count强的多。