我有幾百萬的記錄高事務表與下面的結構:如何有效地查詢表,而不會影響現場交易
transaction
--------------
id int
txn_status varchar
amount bigint
name varchar
txn_time datetime --Date and time of the transaction
的txn_status
字段值可以是completed
或Pending
。我需要運行一個查詢,將具有以下特徵檢索的記錄數:與Pending txn_status
- 事務與
Pending txn_status
,因爲最後15分鐘即(current_time - txn_time) <= 15 minutes
- 交易在過去的16,25分鐘即
(current_time - txn_time) >= 16 minutes and (current_time - txn_time) <= 25 minutes
之間
- 事務與過去26至30分鐘之間,即
Pending txn_status
(current_time - txn_time) >= 26 minutes and (current_time - txn_time) <= 30 minutes
- 事務與
Pending txn_status
超過30分鐘即(current_time - txn_time) > 30 minutes
目前有兩種解決方案,目前我的頭:
查詢生產數據庫使用
case
語句(case語句基於上述時間差將過濾和組記錄)每分鐘的查詢的where
子句。爲了避免使對生產數據庫大的負荷,有一個類似表一個單獨的數據庫和具有
update
和insert
觸發器更新表和數據庫上在1號執行上述事後查詢。
如有是達到這一不把數據庫上大的負荷任何最優或更好的解決方案,請分享。
我不是一個足夠的專家來寫這個作爲一個完整的答案,但我會嘗試加快速度的第一件事是使txn_status一個整數字段,並添加一個索引。您通常不希望對數百萬條記錄進行字符串比較。 – Dave
@Dave這是正確的,我會做同樣的事情,但這是一個遺留數據庫,你知道它是如何。 –