mysql count(*)查询问题

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列是表中的自增的主键之外的其他具有唯一约束索引的列。这样查询时速度会很快。就是可以避免全表扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值