teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

推敲

2021/04/15 04:48

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -14,6 +14,9 @@
14
14
  多量のデータを処理する場合には、分割コミットの検討は必要ですね。
15
15
 
16
16
  処理するデータ件数を分割する場合、最も効果的なのはインデックス項目を使用する事です。
17
- 分割した先頭のキーが分かればそこから、[OFFSET FETCH](https://sql-oracle.com/sqlserver/?p=857)を使用して件数を限定するのが最も効率的です。
17
+ 分割した先頭のキーが分かればそこから、件数を限定するのが最も効率的です。
18
18
  但し、分割した先頭のキーを求める部分は全件を対象にするので、ここがチューニングのポイントになります。
19
+
20
+ または、ページングのように[OFFSET FETCH](https://sql-oracle.com/sqlserver/?p=857)を利用する方法もあります。
21
+
19
22
  件数という事ではなく、例えば部門ごとになどで適切な件数に分割することが出来れば、チューニングは不要になります。

1

追記

2021/04/15 04:48

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -5,6 +5,7 @@
5
5
 
6
6
  row_number()による連番を算出する時間に比例します。
7
7
  番号が大きくなればなるほど、番号算出の為に読み込む件数が増えるので当然です。
8
+ どういった部分に時間が掛かっているかなどは、[実行計画](https://docs.microsoft.com/ja-jp/sql/relational-databases/performance/display-an-actual-execution-plan?view=sql-server-ver15)などで確認が出来ます。
8
9
 
9
10
  > 結果の件数が少ない時は問題ないのですが、数百万件返ってくるときはデータ量が多すぎて処理落ちしてしまいます。
10
11