ページングとUNION ALL
複数のテーブルの使用についても助けが必要です。
UNION ALL
特定の数の行のみを使用して返す複数のテーブルを結合するときに、最適化されたページングを実装するにはどうすればよいですか...
declare @startRow int
declare @PageCount int
set @startRow = 0
set @PageCount = 20
set rowcount @PageCount
select Row_Number() OVER(Order by col1) as RowNumber, col1, col2
from
(
select col1, col2 from table1 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table2 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table3 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table4 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table5 where datetimeCol between (@dateFrom and @dateTo)
) as tmpTable
where RowNumber > @startRow
テーブル 3、4、および 5 には膨大な数の行 (数百万行) があり、テーブル 1 および 2 には数千行しかない場合があります。
startRow が「0」の場合、(Table1 から) 行 1 から 20 までのデータのみを期待します。正しい結果が得られますが、SQL Server がすべてのデータをフィルタリングしようとしている間、残りのテーブルのオーバーヘッドが高くなります....
@dateFrom と @dateTo の間隔が長いほど、結果セット全体から少数の行のみを取得しようとしているときに、クエリが大幅に遅くなります
同様のロジックを使用して、シンプルだがより良いアプローチを実装する方法を教えてください。:(