高性能mysql中关于sql语句的提问

图片说明

关于图中圈出的位置,这个sql语句不是看的明白,懂它的目的,但是不清楚为什么这个写法,请大神解释下

先看括号里面的,就是统计全部的数据条数然后 减去id<5的数据条数

SELECT 1000-COUNT(*) FROM world.City WHERE ID <=5;
楼主,上面这个容易理解不?
那把上面的1000换成(SELECT COUNT(*) FROM world.City)呢?

1.myisam保存表的总行数,因此count(*)并且无where子句,很快会返回表的总行数
2.myisam保存表的总行数,利用count(column)并且无where子句,并且此column不为null,很快会返回表的总行数
3.myisam保存表的总行数,利用count(column)并且无where子句,并且此column可以为null,mysql会对表进行全表或全索引扫描来确定行数
4.innodb查询count(*),count(column(not null)),count(column(may be null))并且无where子句,mysql会对表进行全表或全索引扫描来确定行数
5.myisam和innodb查询count(*),count(column(not null)),count(column(may be null))并且存在where子句,mysql会对表进行索引扫描(如果列上有索引),速度也比较快

mysql 的myisam中count(*) 有特殊算法 , 所以快一些