-1

问题:我们有 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”,因为它会消耗大量磁盘空间并且还可能导致其他类型的问题。

由于我们已经发现了问题,我们选择了一个长期的解决方案,即使这会让公司付出代价。希望您能帮助我们设计一个好的数据库来解决上述问题。

4

1 回答 1

0

(START_DATE, END_DATE, ID)对所有三个表都有索引吗?

这应该会加快查询速度,并且任何只读锁都应该在索引上。

于 2016-11-21T00:44:23.070 回答