计算数据库中特定记录的数量

时间:2016-02-28 17:32:15

标签: java database jdbc

我有一个应用程序需要从数据库中的表中了解最新数量的某些记录,该解决方案应该适用而无需更改数据库代码或添加触发器或函数,因此我需要一个独立于数据库供应商的解决方案。 我用java编写的程序,但数据库可能是(SQLite,MySQL,PostgreSQL或MSSQL),现在我这样做: 在一个设置为守护进程的单独线程中,我的应用程序通过JDBC向数据库发送一个简单的命令,以便知道具有以下条件的最新记录数:

while(true){
          SELECT COUNT(*) FROM Mytable WHERE exited='1'
}

这种编码导致DATABASE锁定,减慢整个系统并生成巨大的DB日志,最终导致整个事情! 我怎么能以正确的方式做到总是拥有最新数量的某些记录,或者仅在数字改变时计算?

2 个答案:

答案 0 :(得分:2)

评论太长了。

SELECT语句本身不应该具有您描述的行为。例如,SELECT没有记录任何内容。现在,有可能会发生并发insert / update / delete语句,并且这些语句会导致问题,因为SELECT会锁定表。

你可以做的两件事:

  1. 确保比较属于同一类型。因此,如果exited是一个数字,请不要使用单引号(混合类型可能会混淆某些数据库)。
  2. (exited)上创建索引。在基本上所有数据库中,这是一个命令:create index idx_mytable_exited on mytable(exited)
  3. 如果锁定和并发事务是一个问题,那么您将需要执行更多特定于数据库的事情,以避免该问题。

答案 1 :(得分:1)

正如其他人所说,请确保退出已编入索引。

此外,您可以在查询中设置事务隔离以执行“脏读”;这向数据库服务器指示您不需要等待其他进程的事务提交,而是希望读取那些其他进程正在更新的行的当前退出值。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED是使用“脏读”的标准语法。