Prepared statement
バージョン 3.2 以降、StarRocks は、同じ構造で異なる変数を持つ SQL ステートメントを複数回実行するための prepared statements を提供しています。この機能により、実行効率が大幅に向上し、SQL インジェクションを防止できます。
説明
prepared statements は基本的に次のように動作します。
- 準備: ユーザーは変数をプレースホルダー
?で表した SQL ステートメントを準備します。FE は SQL ステートメントを解析し、実行計画を生成します。 - 実行: 変数を宣言した後、ユーザーはこれらの変数をステートメントに渡して実行します。ユーザーは異なる変数で同じステートメントを複数回実行できます。
利点
- 解析のオーバーヘッドを削減: 実際のビジネスシナリオでは、アプリケーションは同じ構造で異なる変数を持つステ ートメントを複数回実行することがよくあります。prepared statements がサポートされている場合、StarRocks は準備段階でステートメントを一度だけ解析する必要があります。異なる変数で同じステートメントを後続で実行する際には、事前に生成された解析結果を直接使用できます。このようにして、特に複雑なクエリにおいてステートメントの実行パフォーマンスが大幅に向上します。
- SQL インジェクション攻撃を防止: ステートメントを変数から分離し、ユーザー入力データを直接変数に連結するのではなくパラメータとして渡すことで、StarRocks は悪意のあるユーザーが悪意のある SQL コードを実行するのを防ぐことができます。
使用法
prepared statements は現在のセッションでのみ有効であり、他のセッションでは使用できません。現在のセッションが終了すると、そのセッションで作成された prepared statements は自動的に削除されます。
構文
prepared statement の実行は次のフェーズで構成されます。
- PREPARE: 変数をプレースホルダー
?で表したステートメントを準備します。 - SET: ステートメント内で変数を宣言します。
- EXECUTE: 宣言された変数をステートメントに渡して実行します。
- DROP PREPARE または DEALLOCATE PREPARE: prepared statement を削除します。