mysql Count 查询记录总条数,效率很慢

mysql Count 查询记录总条数,效率很慢,第1张

只记录一列的总条数会快点count(列名)。或者where条件改为city like '%扬州' or city like '扬州%',city like '%扬州%' 是进行全表查询,修改后是两个范围的扫描,性能也能提高一些,你试一试。还可以使用索引。

1.除非要统计某列非空值的总数,否则任何情况一律用COUNT(*),效率比COUNT(列名)高很多

2.除非有特殊需要,否则COUNT(*)不要加WHERE条件,会严重影响效率,如果加了条件COUNT(*)和COUNT(主键)效率是一致的,COUNT(非主键)效率很低

3.在没有WHERE条件的情况下:COUNT(*)等于COUNT(主键)优于COUNT(非主键有索引)优于COUNT(非主键无索引)

4.只要加了WHERE就会降低效率,即使是WHERE 1=1

5.以上结论在MySql和Sql Server上亲测得出

2020-03-01

对于count的函数的使用,我们常见的一个错误是在括号内随意指定一个列去统计结果集的行数。但只有指定的行确实都是有值的时候,统计的才是实际的行数,否则可能统计的结果并不是实际的行数。而对于MyISAM存储引擎,如果某一列的值确实不可能为null时,MySQL内部就会将count()函数优化成count(*),若没有带where条件,此时计算速度是非常快的,因为此时没有实际的去计算表的行数。

总结: 对于MyISAM存储引擎,不带where条件的count(*)是非常快的。

技巧:

利用上述MyISAM的count(* )特性,加速一些特定查询条件的count()查询。

如:

对于select count(* ) from tablename where id >10可以做如下的反转查询:

select (select count(* ) from tablename) - count(* ) from tablename where id <10

因为这样在查询阶段MySQL将子查询当做一个常数来处理,大大减少了扫描的行数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8561917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存