プリペアドステートメントは、たとえばパラメータ値のみが異なる可能性のある反復SQLコマンドを実行できるようにするためのものです。
プリペアドステートメントはアクティブなデータベース接続を予約する可能性があるため(「ロング」は使用されない場合を意味します。プリペアドステートメントを何度も繰り返し実行することはまったく問題ありません)、これらは「長く」存続することを意図していません。これに時間がかかる場合でも、回数)。接続は高価なリソースであり、必要な期間だけ保持する必要があります。プリペアドステートメントの束を作成し、それらを閉じないだけで、アクティブな/許可された接続が不足し、データベースサーバーへのそれ以上の通信をブロックする可能性があります。
同じinsert
を実行する場合は、プリペアドステートメントを使用します 、update
またはselect
1つの(HTTP)リクエストで複数回異なるパラメータを持つステートメント。プリペアドステートメントを使用して(HTTP)リクエストを存続させないでください。
特定のドライバーの実装とデータベースサーバーでは、プリペアドステートメントにDBサーバー自体に割り当てられたリソースが含まれる場合があります(Goアプリケーションではありません)。たとえば、プリペアドステートメントがDBサーバーでプリコンパイルされ、サーバーがクエリ実行プランを準備し、メモリなどの特定のリソースを割り当てる場合があります。これらは、準備されたステートメントが閉じられるまで永続的に予約される場合があります。
全体として、あなたが説明するのは作業モデルであり、後続の多くの要求で必要/実行される準備済みステートメントの数が少ない場合、応答時間が短くなる可能性があります。しかし、一方で、長期的には、準備されたすべてのステートメントがプールのすべての接続で準備される可能性があることも意味します。これがあなたのケースで受け入れられるかどうかを決定します。
一般に、これは回避する必要があります(そして、準備されたステートメントはHTTPリクエストの終了前に閉じられます)が、それらの数が少なく、次々と続く多くのリクエストでそれらが必要な場合は、リクエストスコープ外に移動できます。 。