【かーそる】
カーソル(データベース) とは?
💡 クエリ結果を「1行ずつ」取り出して処理する
📌 このページのポイント
- SELECT結果を一括取得せず、1行ずつ順次アクセスする仕組み
- ストアドプロシージャ内で行単位の複雑な処理に使用
- パフォーマンスに注意(セットベースの処理の方が高速)
- API設計では「カーソルベースページネーション」として別の意味でも使われる
SELECTで一括取得するのと何が違う?
通常のSELECTは結果を一度にメモリに取得する。100万行あれば100万行分のメモリが必要。カーソルは結果セットを保持しつつ1行ずつ取り出すから、メモリ効率が良い。ただしRDBMSは集合操作(セットベース)が得意だから、カーソルより普通のSQLの方が圧倒的に速いことが多いんだよ
いつカーソルを使う?
カーソルベースページネーションって別物?
パフォーマンスの注意点は?
カーソルはRDBMSの最適化が効きにくい。100万行をカーソルでループするより、UPDATE ... SET ... WHERE条件で一括更新する方が数十倍速い。SQL Serverでは FAST_FORWARD(読み取り専用・前方のみ)カーソルが最速。PostgreSQLではSERVER CURSORで大量結果のフェッチに使うことがある。原則「カーソルは最後の手段」と覚えようね
まとめ:ざっくりこれだけ覚えればOK!
「カーソル」って出てきたら「クエリ結果を1行ずつ処理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Database Cursor」 = データベースカーソル(指示子)
💬 Cursor(指し示すもの)。結果セットの中で今どの行を指しているかを示すよ