私は自動的にSQL文を生成してDBを検索して特定の値のリストを探します。これにより、たとえば、SQL_QueryTableに格納されている180の問合せが生成されます。次に、私はカーソルを使用してSQL_QueryTableから各ステートメントをフェッチし、1億5000万レコードのテーブルに対してステートメントを実行し、最終的に結果を結果テーブルに格納します。n個のSQL文を持つテーブルに対してSQLクエリの並列処理を実行しますか?
ただし、これは動作しますが、非常に時間がかかります。 実行時間を改善するための提案を探しています。
DECLARE @SQLQuery nvarchar(max)
DECLARE @Counter int = 1
DECLARE @TrackerID nvarchar(max)
DECLARE SQLQuery CURSOR
FOR SELECT SQL_Query, TrackerID FROM SQL_QueryTable
OPEN SQLQuery
FETCH NEXT FROM SQLQuery INTO @SQLQuery, @TrackerID
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @SQLQuery
PRINT @Counter
Insert Into Table_1 (column1, column2, column3, column4)
Exec(@SQLQuery) --
Update Table_1
Set TrackerID = @TrackerID
where TrackerID is null
SET @Counter = @Counter + 1
FETCH NEXT FROM SQLQuery INTO @SQLQuery, @TrackerID
END
Close SQLQuery
Deallocate SQLQuery
クエリは自動的に生成する必要がありますか?必要なものを実行するクエリの数を減らすことができれば、並列性は自動的に発生します(クエリプランナが高速化すると仮定した場合)。並列性が問題ではないかもしれません - より良いインデックスが必要なのかもしれません –
はあなたのクエリが何をしているかに依存します...もしあなたの180のクエリが1つのレコードを処理しているなら、カーソルを使うのではなく、 – Squirrel
こんにちは@ Nick.McDermaid、私は検索する必要があるキーワードの数が異なるので、私は自動的にSQL文を生成する必要があります。したがって、それらを1つのカーソルを使用してSQLステートメントとしてテーブルに格納し、2番目のカーソルを実行して結果を実行して格納します。 – vtanov