1

私はクエリを作成していますが、最新の手順SELECT COUNT(*) FROM [modification]では、クエリの最後の行を検出できるようにするサブ句​​を追加しましたが、パフォーマンスが低下します。

SELECT CONCAT(
      IIF(row_number() OVER (ORDER BY forecastId) % 50000 = 1,
          CONCAT('INSERT INTO modification (userId, epochTime, ',
                 'forecastId, description, auxText, auxDate) VALUES ('), 
          '    ('),
      userId, ',',
      epochTime, ',',
      forecastId, ',',
      '''', dbo.encode4MySql(description), ''',',
      '''', dbo.encode4MySql(auxText), ''',',
      '''', CONVERT(VARCHAR(20), auxDate, 120), ''')',
      IIF(row_number() OVER (ORDER BY forecastId) % 50000 = 0
          OR row_number() OVER (ORDER BY forecastId) = 
                      (SELECT COUNT(*) FROM modification),
          '; COMMIT;', ','))
FROM modification
ORDER BY forecastId;

何をしているのかわからない場合は、一度INSERT () VALUES (),(),(),...に 50000 行のステートメントを作成しています。

コメントに対する完全に代替的なアプローチの提案を制限してください。クエリを大幅に遅くすることなく、ここで最後の行番号を見つける方法を探しています。

私はクエリプランにあまり詳しくありませんが、役立つ場合はここに投稿できます。ここで関連する質問から多くのことを試しましたが、何もうまくいきません。

4

3 に答える 3