sql - 如何有效地选择表中新添加的行?

标签 sql mysql database performance relational-database

我需要定期更新本地缓存,向某些数据库表添加新内容。表格行包含一个自动递增序号 (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/

相关文章:

mysql - Magento 使用 csv 数据流导入客户(700k)太慢

PHP - 如果变量的字符是数字然后做一些事情

sql - 在 SNOWFLAKE SQL 中选择和聚合不同 id 的变量

mysql - 清理数据库、rake 任务或 sql 的更好方法是什么?

SQL:row_number:按日期排序,最后需要 Null

php - 根据不同的日期间隔计算价格

sql - 带有 INSERT 存储过程的 C#\r\n 问题

mysql - 为什么 MySQL 在创建触发器时出现此错误?

php - 如何在 php 或 mysql 中搜索公共(public)数据库

sql - 检查 SQL 中的字段是否包含特定的字母数字格式