我在公司中負責的專案有遇到一個問題,情景如下
我有兩張資料表,分別是交易紀錄的買/賣,有時間戳記,兩張表沒有關聯性
我想達成"依照時間最新的搜索找出買/賣紀錄的共N筆資料"並生成報表
在我的想法中,我是先直接抓範圍內所有資料,最後依時間排序後,再決定輸出的page、pagesize。但我的同事說這在大流量下會對程式造成負擔,希望我能想出優化的方法
我自己目前的解決方式是在SQL中LIMIT限定N筆,這樣兩張表共抓出2N筆(因為最新時間有可能都是同一買/賣),並在調出來後在程式裡進行時間排序。
我不覺得我這方法是做到最好了,請問有其他最佳解?
請問在商業環境中,各位前輩有其他做法嗎,可以給我一點方向或舉例嗎?
改寫成SP
縮減HTTP傳輸SQL指令字串的量
表分區Partition Table
https://coolmandiary.blogspot.com/2023/01/sqlpartition-table.html
建議最優解是寫SP(store procedure, 預儲程序),以下用SQL Server的T-SQL語法實作分頁語法:
CREATE PROCEDURE SearchBills
@StartDate DATETIME,
@EndDate DATETIME,
@SkipRows INT,
@TakeRows INT
AS
BEGIN
SET NOCOUNT ON;
-- 使用 OFFSET FETCH 子句實作分頁
SELECT *
FROM Bills
WHERE TransactionTime >= @StartDate
AND TransactionTime <= @EndDate
ORDER BY TransactionTime
OFFSET @SkipRows ROWS
FETCH NEXT @TakeRows ROWS ONLY;
END;