我需要定期更新本地缓存,向某些数据库表添加新内容。表格行包含一个自动递增序号 (SN) 字段。缓存也保留这个数字,所以基本上我只需要获取 SN 大于我已有的最高行的所有行。
SELECT * FROM table where SN > <max_cached_SN>
但是,大多数尝试都不会带来任何数据(我只需要确保我有一个绝对最新的本地副本)。所以我想知道这是否会更有效率:
count = SELECT count(*) from table;
if (count > <cache_size>)
// fetch new rows as above
我想通过索引数字字段进行选择非常有效,所以我想知道使用 count
是否有好处。另一方面,这个测试/更新会非常频繁地由许多客户进行,因此有动力对其进行优化。
最佳答案
this test/update will be done quite frequently and by many clients
这可能会导致意想不到的缓存生成竞争
我会建议
- 在您的表中添加新内容后,将最新的 ID 添加到队列表中
- 使用类似crontab的方式通过检查队列表来触发缓存生成
- 生成新缓存后,从队列表中删除该id
因为您强调大多数尝试都不会带来任何数据,以上只会在有新添加的地方触发
还有队列表的概念,甚至可以展开更新和删除
关于sql - 如何有效地选择表中新添加的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578639/