sql >> データベース >  >> RDS >> Sqlserver

ストアドプロシージャの実行がスクリプトからのSQLクエリよりも速いのはなぜですか?

    SQL Serverは基本的に、これらの手順を実行して任意のを実行します。 クエリ(ストアドプロシージャ呼び出しまたはアドホックSQLステートメント):

    1)クエリを構文的にチェックします
    2)問題がないかどうか-プランキャッシュをチェックして、そのクエリの実行プランがすでにあるかどうかを確認します
    3)実行プランがあるかどうか-そのプランは(再使用され、クエリが実行されます
    4)プランがまだない場合は、実行プランが決定されます
    5)そのプランは後で再利用するためにプランキャッシュに保存されます
    6)クエリが実行されます

    重要なのは、アドホックSQLとストアドプロシージャは、違いはありませんということです。 。

    アドホックSQLクエリがパラメータを適切に使用している場合(とにかく、SQLインジェクション攻撃を防ぐため)、そのパフォーマンス特性に違いはなく、間違いなく悪くない ストアドプロシージャを実行するよりも。

    ストアドプロシージャには他の利点もありますが(たとえば、ユーザーに直接テーブルアクセスを許可する必要はありません)、パフォーマンスの観点から、適切にパラメーター化されたアドホックSQLクエリを使用することは同じくらい効率的です ストアドプロシージャを使用する場合。

    更新: 非パラメータ化でのストアドプロシージャの使用 クエリは2つの主な理由で優れています:

    • パラメータ化されていない各クエリは新しい、異なるであるため SQL Serverへのクエリでは、クエリごとに実行プランを決定するすべての手順を実行する必要があります(したがって、実行プランをプランキャッシュに格納しても実際には役に立たないため、時間とプランキャッシュスペースが無駄になります) 、その特定のクエリはおそらくないので 再度実行されます)

    • パラメータ化されていないクエリはSQLインジェクション攻撃のリスクがあるため、絶対に避ける必要があります



    1. SQLLIMITおよびOFFSETクエリを使用してすべてのレコードを選択する

    2. RUまたはRUR?

    3. postgresqlによって生成されたシーケンスの前に文字列のプレフィックスを付ける方法は?

    4. MYSQL ORDERBYCASEの問題