对于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将子查询当做一个常数来处理,大大减少了扫描的行数。
一共加了三条数据
insert into pl_org_region(parent_id,region_sn,region_name,comments) values (0,'001','北京大区','无')insert into pl_org_region(parent_id,region_sn,region_name,comments) values (0,'002','西南大区','无')
insert into pl_store (store_sn,region_id,region_name) values ('P001',6,'北京大区')
查询语句改成:
SELECTp.region_id,
COUNT(p.region_id) AS cnt,
r.*
FROM
pl_org_region r
LEFT JOIN pl_store p ON r.region_id = p.region_id
GROUP BY
p.region_id
查询结果:
用mysql语句显示图书总数数量在mysql中,可以使用SELECT语句查询数据,并利用COUNT()函数统计查询结果的数量,语法“SELECT COUNT(*) FROM 表名 [...]”或“SELECT COUNT(字段名) FROM 表名 [...]”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)