select count(*) from tablename.这个查询的速度与表的类型关系很大(400万条数据,innodb型表2分钟19秒,MyISAM类型的表不到一秒)。这主要是MyISAM表保存了表的行数,直接返回就可以了,而innodb表没有保存行数,需要全表扫描。
那么对于indodb表如何加快这个查询呢?
测试如下:id是主键,pid是外键,两者都有唯一索引,name 列无索引。
加上where子句:
where id>0,与不加where子句一样,2分钟19秒。
where pid>0,很快,3.32秒。
select count(id),与count(*)效率基本一样。
select count(name) from tablename 这个查询加不加where子句都需要2分钟以上。
总结:InnoDB类型的表用count(*)或者count(主键),加上where col 条件。其中col列是表中的自增的主键之外的其他具有唯一约束索引的列。这样查询时速度会很快。就是可以避免全表扫描。