问题:我们有 3 个 TRANSACTION 表,每个表大约有 150 万条记录,目前它们根本没有任何关系并且彼此独立。在我们的 Web Portal 中,每当我们单击“事务”选项卡时,我们的 SQL 查询都会查询这 3 个表并计算每个表的当前行数。
示例查询描述如下:
查询一:
select Count (ID)
from TRANSACTION_REQUEST
where START_DATE ='2016-21-10' AND END_DATE = '2016-21-11';
查询 2:
select Count(ID)
from TRANSACTION_SUCCESS
where START_DATE = '2016-21-10' AND END_DATE = '2016-21-11';
查询 3:
select Count(ID)
from TRANSACTION_FAIL
where START_DATE = '2016-21-10' AND END_DATE = '2016-21-11';
每次执行上述查询时,我们都知道表被锁定,因为我们没有应用任何ISOLATION
方法(只读)。我们知道我们可以申请ISOLATION
(通过 Spring、Hibernate),但问题是代码非常庞大,这只是一个临时修复。并且由于表锁定,一些应用程序变得缓慢或无法工作,因为它们确实访问了相同的表。我们不想READ_COMMITTED_SNAPSHOT
在系统级别应用“ON”,因为它会消耗大量磁盘空间并且还可能导致其他类型的问题。
由于我们已经发现了问题,我们选择了一个长期的解决方案,即使这会让公司付出代价。希望您能帮助我们设计一个好的数据库来解决上述问题。