2016-11-20 34 views
-1

問題:我們有3個TRANSACTION表,每個表約有150萬條記錄,目前它們根本沒有任何關係,並且彼此獨立。在我們的Web門戶中,每當我們點擊「事務」選項卡時,我們的SQL查詢將查詢這3個表並計算每個表的當前行數。針對導致數據庫鎖定的過度使用的表的最佳SQL DB設計

示例查詢描述如下:

查詢1:

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'; 

每次上述查詢被執行,我們k現在表格被鎖定,因爲我們不應用任何ISOLATION方法(只讀)。我們知道我們可以通過應用ISOLATION(通過Spring,Hibernate),但問題是代碼非常大,這只是一個臨時修復。由於表鎖定,一些應用程序變得越來越慢,或者因爲它們訪問相同的表而不工作。我們不希望在系統級別將「READ_COMMITTED_SNAPSHOT」應用於「ON」,因爲它消耗了大量的磁盤空間並可能導致其他類型的問題。

由於我們發現問題,即使公司花費巨大,我們也選擇長期解決方案。希望你可以通過一個好的數據庫設計來幫助我們解決上述問題。

+1

該日期格式是否真的有效?這是什麼數據庫? –

+0

*「每當我們點擊」事務「選項卡時,我們的SQL查詢將查詢這3個表並計算每個表的當前行數」*爲什麼?這看起來有點奇怪。 –

+0

僅僅從表中讀取並不能鎖定它 - 至少在任何現代的DBMS中都沒有。你正在使用哪個DBMS? –

回答

0

您是否在所有三張桌上都有(START_DATE, END_DATE, ID)的索引?

這應該加速該查詢,並且任何只讀鎖都應該位於索引上。

+0

嗨戈登,是的,上面的3列被編入索引。 –

+0

@MichaelCo。 。 。需要這三個列的順序需要一個索引。 –

相關問題