我們有一種情況,我們需要將4個不同表中的結果組合成一個列表,並通過OFFSET/FETCH對其進行分頁。分段聯合所有結果 - 最佳性能
想要從表a,b,c選擇記錄d,按照CreatedDatetime排序,然後按OFFSET X排序。FETCH Y.表格非常大(按行數),聽起來很糟糕UNION ALL然後分頁,因爲這意味着可能會編譯整個記錄列表,然後再分頁。
問題是,沒有任何表可以作爲參考來提取開始/結束日期時間窗口,因爲每個集合可能但也可能不包含任何表中的記錄。例如,最終結果可能包含表a; a/b; a/b/c; a/b/c/d; b; b/c;....
的任意組合的記錄,我們需要返回固定大小的數字(分頁大小,例如20)。
關於如何最有效地處理此問題的任何想法?
UPDATE
基於從@HABO 問題有不幸的是沒有什麼特別的線索,這樣有關查詢。我們在系統中顯示用戶活動。它有不同的種類(我們選擇的表格)。現在,查詢會彈出查看活動的管理員的數據。管理員如何看待數據可能會有很大的不同:一些用戶在過去幾個小時內會有數千個活動,管理員希望看到他們。在其他情況下,用戶將在一天中執行三項操作,管理員將只看到第一頁數據。
PS。這不是一個純粹的日誌表,因爲隨着時間的推移,活動充當狀態機,每個狀態都有其狀態,我們也在這些查詢中尋找狀態。
確實的數據必須是實時的?索引視圖足夠了嗎?等待的開銷會被推遲到關閉時間,並且視圖上的索引可以提供您正在尋找的性能。它只是將工會的等待移動到更合適的時間。 – xQbert
好吧,這是一個很好的問題。如果這樣做,那麼這不會是一個問題,如果沒有其他解決方案,我們會按照你的建議。但現在我想看看它是否有可能以可接受的方式實時做到這一點。 –
我的意思是,我們可以通過添加一些假設來進行探測,例如,向後5小時將產生20個結果,如果不是,則返回更多...但這不是真正的SQL ... –