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

SELECTステートメントでのNOLOCKヒントの効果

    1)はいNOLOCKで選択 通常の選択よりも速く完了します。

    2)はいNOLOCKで選択 影響を受けるテーブルに対する他のクエリを通常の選択よりも速く完了することができます。

    これはなぜですか?

    NOLOCK 通常(DBエンジンによって異なります)は、データを提供することを意味します。データがどのような状態であるかは関係ありません。また、データを読み取る間、わざわざデータを保持する必要はありません。一度に高速で、リソースをあまり消費せず、非常に危険です。

    システムクリティカルなものから更新したり、システムクリティカルなものを実行したりしないように、またはNOLOCKから発信されたデータを使用して絶対的な正確さが要求される場合は警告する必要があります。 読む。このデータには、クエリの実行中に削除された行、またはまだ確定されていない他のセッションで削除された行が含まれている可能性があります。このデータには、部分的に更新された行が含まれている可能性があります。このデータには、外部キー制約に違反するレコードが含まれている可能性があります。このデータは、テーブルに追加されているがまだコミットされていない行を除外している可能性があります。

    データの状態を知る方法は本当にありません。

    行数やその他の要約データなど、ある程度の許容誤差が許容できるものを取得しようとしている場合は、NOLOCK これらのクエリのパフォーマンスを向上させ、データベースのパフォーマンスに悪影響を与えないようにするための良い方法です。

    常にNOLOCKを使用してください 細心の注意を払ってヒントを与え、返されるデータは疑わしいものとして扱います。



    1. SQL Serverデータベースの現在のrowversion値を返す方法(T-SQLの例)

    2. AWS上のWindowsでのShareplex入門、パート1

    3. ON句とSQLのusing句の違い

    4. OracleのREMAINDER()関数