2014-01-15 24 views
1

在我的web應用程序(Java + Spring + JPA)中,我有一個方法執行一組相關的查詢。特別是我需要知道某個表的總行數和某個查詢的結果集的行數。如何避免在進行一組查詢時更改數據庫?

顯然,這兩個查詢的變化可以在我的表發生之間:一個新行補充道,行刪除,字段值等改變

表有數百萬行,所以這是不可能加載整個表中存儲並在應用程序環境中進行過濾。

所以,我需要找到一種方法來執行一組查詢,維護表(相同的快照)相同的「狀態」。 在同一個事務中執行查詢是否足夠,還是有其他方法?

UPDATE 該方法用於表格分頁。我需要顯示從t現有行(TOTAL)中過濾的行(PAGE)取自的頁面(SEARCH)

所以基本上我需要提取n條記錄並提供兩個數字信息:過濾行數和總行數。

我可以執行SELECT count(*) from table,然後SELECT count(*) from table where <search criteria>然後SELECT * from table where <search criteria> limit <n>,但我必須確保沒有任何變化之間appens在...

我使用MySQL 5

+0

@AndreiI更新 – davioooh

回答

0

我的測試在MySQL 5.5.28表明你可以依賴事實,只是在一個事務中不會計入任何新的插入/刪除/更改的行(處於事務隔離級別的REPEATABLE READ)。這意味着,COUNT()受限於事務隔離級別。根據documentation這種模式正是你想要的:基於第一次讀取的基於快照的讀取。

相關問題