计数表的技巧

针对InnoDB引擎不存储行数统计信息导致select count(*)效率低的问题,本文介绍了一种通过维护计数表来提高查询速度的方法,包括使用触发器实时更新计数表、将更新操作分散到多行以减少锁竞争等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一些引擎,如innodb,由于其不存储表中的行数,因此,select count(*)对于innodb来说,是比较慢的;相比之下,myisam由于其存储表中行数的统计信息,因此select count(*)更加快速

详细讨论见:http://blog.youkuaiyun.com/gtuu0123/archive/2010/04/11/5473045.aspx

 

可以采用计数表的方式,将一个innodb表的行数写到其他表

http://www.penglixun.com/tech/database/count_table_skill.html文章给出了解决办法

总结如下:

(1)利用触发器,在每次添加和删除记录时,更新记数表

(2)对于记数表的某一行更新很频繁,会造成大量的锁,因此可以将对某一个表的记数的行扩展到多行,每次随机选取一行进行+1和-1操作,这样就把对一行更新的压力分散到了多行

(3)对于条件的count(*),考虑也把相应的条件引入记数表作为一个字段,那么不同的条件,可以建立不同的记数表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值