gpt4 book ai didi

mysql - 提高仅增长表(不删除)的记录计数性能

转载 作者:行者123 更新时间:2023-11-29 15:41:48 25 4
gpt4 key购买 nike

我读过很多关于计数记录性能的答案,例如https://stackoverflow.com/a/1332730/7906257 ,并且都说没有简单的解决方案。我使用 InnoDB,并且有带有 PK 主键的 CL_GAME 表。最重要的是,我有一个特殊的用例,它绝对可以优化:记录永远不会从表中删除,而只会添加。是否可以说 MySQL 在计算记录时跳过内部验证(如上面链接中所述):

SELECT COUNT(pk) FROM CL_GAME WHERE pk <= 1072370;

有一些想法,并不完美:

  1. 一个明显的技巧是标准化表并消除pk之间的任何间隙。所以 pk 反射(reflect)了之前的记录数。但这看起来很危险,因为某些恢复的事务可能会破坏它(好吧,有一些重要的解决方案,例如 https://www.percona.com/blog/2011/11/29/avoiding-auto-increment-holes-on-innodb-with-insert-ignore/ )

  2. 另一个想法是拥有额外的表,其中包含对 ,其中 count 是该对中 pk <= pk 的记录数。因此,可以仅对表的一部分进行计数并使用预先计算的值。但我宁愿避免任何额外的结构/缓存,因为实现、验证和支持它们需要时间

最佳答案

您可以稍微改进第二个选项。您不需要持久表来进行 pk->count 匹配。您将仅使用该表中的最新记录。

您可以将此值保存在内存/服务中并定期更新它们,而不是表。它仍然需要一些额外的编码工作,但您将避免过多的表扫描来计算旧记录。

请记住,未提交的事务可能会插入其他事务不可见的记录。换句话说,为此 pk->count 匹配保留的 pk 值应小于事件事务中的任何 pk。

关于mysql - 提高仅增长表(不删除)的记录计数性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57564230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com