セットベースのクエリ: カーソルへの優れたアプローチ
データベース クエリでは、カーソルまたはセットベースのクエリを利用して、データを取得して操作します。カーソルでは行を一度に 1 つずつ反復する必要がありますが、セットベースのクエリは 1 つのステートメントでテーブル全体またはサブセットに対する操作を実行します。
セットベースのクエリの利点
セットベースのクエリの基本的な利点は、その固有の並列化可能性にあります。データベース エンジンは、セットベースの操作を複数のスレッドに分散することで最適化できます。この並列化により、カーソルベースの操作に必要な時間のほんのわずかな時間で大量のデータセットを効率的に処理できるようになります。
対照的に、カーソルはデータをシーケンシャルに処理し、本質的にシングルスレッドです。その結果、データ量が大きい場合は大幅に遅くなります。
例
次のタスクを考えてみましょう:
で注文されたすべての顧客を取得します。過去 30 日間。
カーソルベース解決策:
DECLARE my_cursor CURSOR FOR SELECT * FROM Customers WHERE order_date >= DATEADD(day, -30, CURRENT_DATE); OPEN my_cursor; FETCH NEXT FROM my_cursor INTO @customer; WHILE (@@FETCH_STATUS = 0) BEGIN -- Process customer data FETCH NEXT FROM my_cursor INTO @customer; END; CLOSE my_cursor; DEALLOCATE my_cursor;
セットベースの同等物:
SELECT * FROM Customers WHERE order_date >= DATEADD(day, -30, CURRENT_DATE);
セットベースのクエリは、データベース エンジンの並列性を活用して、条件を満たすすべてのクエリを処理します。これにより、カーソルベースのアプローチと比較してパフォーマンスが大幅に向上します。
以上がカーソルとセットベースのクエリ: データベース クエリにセットベースの操作を選択する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。