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

NOLOCK(SQL Serverヒント)は悪い習慣ですか?

    Stack Overflowに取り組む前は、NOLOCKに反対していました。 SELECTを実行できる可能性のあるプリンシパル NOLOCKを使用 古くなっているか一貫性がない可能性のあるデータで結果を取得します。考慮すべき要素は、別のプロセスが同じテーブルからデータを選択しているときに、同時に挿入/更新される可能性のあるレコードの数です。これが頻繁に発生する場合は、READ COMMITED SNAPSHOTなどのデータベースモードを使用しない限り、デッドロックが発生する可能性が高くなります。 。

    その後、NOLOCKの使用に関する見方を変えました。 SELECTをどのように改善できるかを目撃した後 パフォーマンスだけでなく、大量にロードされたSQLServerでのデッドロックを排除します。データが正確に100%コミットされていないことを気にせず、古くなっている場合でも結果をすぐに戻す必要がある場合があります。

    NOLOCKの使用を検討するときは、自問してください。 :

    クエリにINSERTの数が多いテーブルが含まれていますか / UPDATE コマンドと、クエリから返されたデータが特定の瞬間にこれらの変更を見逃している可能性があるかどうかを気にしますか?

    答えが「いいえ」の場合は、NOLOCKを使用します パフォーマンスを向上させるため。

    NOLOCKをすばやく検索しました Stack Overflowのコードベース内のキーワードで138個のインスタンスが見つかったため、かなりの数の場所で使用しています。

    1. PostgreSQLBツリーインデックスに関する注意

    2. アダプティブ結合しきい値

    3. ISNULLと=NULLの間に違いはありますか

    4. データベースの最後のN行を順番に取得しますか?