問題:我們有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」,因爲它消耗了大量的磁盤空間並可能導致其他類型的問題。
由於我們發現問題,即使公司花費巨大,我們也選擇長期解決方案。希望你可以通過一個好的數據庫設計來幫助我們解決上述問題。
該日期格式是否真的有效?這是什麼數據庫? –
*「每當我們點擊」事務「選項卡時,我們的SQL查詢將查詢這3個表並計算每個表的當前行數」*爲什麼?這看起來有點奇怪。 –
僅僅從表中讀取並不能鎖定它 - 至少在任何現代的DBMS中都沒有。你正在使用哪個DBMS? –