InnoDB:更新表上的锁定超时并有效地选择结果

时间:2011-12-19 19:54:24

标签: java mysql sql innodb

我有一个带锁定超时列的InnoDB表。如果此列为null,则表示没有锁定,否则会有一个锁定根据该列中的时间戳超时。

我遇到的问题是此表中有很多行,并且此表中的许多行每分钟都会被处理,但处理当前正遵循此模型:

1. select rows to be processed
2. iterate over rows to be processed in Java
     a. Try to acquire a lock on row
     b. if lock acquired, process row and continue; else continue

这种效率非常低,所以如果我可以尝试获取 所有 要处理的行的锁定,那将会很棒,然后返回在一次交易或一些更有效的交易中获得锁的行的结果集。

你会推荐什么?

1 个答案:

答案 0 :(得分:0)

只使用sql中的where子句选择可以获取锁的行,如

where lock_timeout is null

另外,我希望如果这有多个线程,你可以在整个代码部分放置一个互斥或其他东西。从选择行到锁定的所有内容。