指定したSQLを高速化したい場合、AIツールを利用すると、修正案をいくつか提案してくれる。
今回は、GoogleのAIモードを利用して、SQLを高速化してみたので、その手順を共有する。
前提条件
下記記事の実装が完了していること。
SQL Serverで一定件数ずつデータ更新とデータ追加をしてみたテーブルデータを更新する際に、テーブル全件を一括更新しようとすると、テーブルロックによりデッドロックが発生する可能性があるため、一定件数...
SQLの高速化
GoogleのAIモードを利用して、SQLを高速化する手順は、以下の通り。
1) WebサイトでGoogleにアクセスする。
https://www.google.com/

5) 以下のように、AIモードで改善提案を提示してくれることが確認できる。


6) AIモードで提案された「ループを維持する場合のSQL」を参考に、修正したSQLは、以下の通り。
DECLARE @BatchSize INT = 1000; -- ループさせるなら1000〜5000程度が効率的
DECLARE @AffectedRows INT = 1;
DECLARE @RoopCount INT = 1; -- ループカウント数
WHILE (@AffectedRows > 0)
BEGIN
-- UPDATEしたIDを直接、履歴テーブルに流し込む
UPDATE TOP (@BatchSize) dbo.USER_DATA
SET memo = N'ループカウント数:' + CAST(@RoopCount AS NVARCHAR) + N'、実行時刻:' + FORMAT(GETDATE(), 'yyyy/MM/dd HH:mm:ss')
OUTPUT inserted.id, GETDATE() INTO dbo.USER_DATA_MEMO_UPD(id, upd_time)
WHERE memo IS NULL; -- もしくはリセットせず特定の条件で
SET @AffectedRows = @@ROWCOUNT;
SET @RoopCount = @RoopCount + 1;
END8) 6)のSQLを実行後、SQL修正前と同様、USER_DATAテーブルのmemoが、赤枠部分のように更新されていることが確認できる。
SELECT * FROM dbo.USER_DATA ORDER BY id ASC

9) 6)のSQLを実行後、SQL修正前と同様、USER_DATA_MEMO_UPDテーブルに、赤枠部分のようにデータ追加されていることが確認できる。
SELECT * FROM dbo.USER_DATA_MEMO_UPD ORDER BY id ASC

要点まとめ
- 指定したSQLを高速化したい場合、AIツールを利用すると、修正案をいくつか提案してくれる。









