sql >> Database >  >> RDS >> Sqlserver

Is de NOLOCK (Sql Server hint) een slechte gewoonte?

Voordat ik aan Stack Overflow werkte, was ik tegen NOLOCK op de principal dat u mogelijk een SELECT . zou kunnen uitvoeren met NOLOCK en krijg resultaten terug met gegevens die mogelijk verouderd of inconsistent zijn. Een factor om over na te denken is hoeveel records er tegelijkertijd kunnen worden ingevoegd/geüpdatet terwijl een ander proces gegevens uit dezelfde tabel selecteert. Als dit vaak gebeurt, is de kans op impasses groot, tenzij u een databasemodus gebruikt zoals READ COMMITED SNAPSHOT .

Ik heb sindsdien mijn kijk op het gebruik van NOLOCK . veranderd na getuige te zijn geweest van hoe het SELECT . kan verbeteren prestaties en het elimineren van impasses op een enorm belaste SQL Server. Er zijn momenten dat het u niet kan schelen dat uw gegevens niet precies 100% zijn vastgelegd en dat u snel resultaten nodig heeft, ook al zijn ze mogelijk verouderd.

Stel uzelf een vraag wanneer u denkt aan het gebruik van NOLOCK :

Bevat mijn zoekopdracht een tabel met een hoog aantal INSERT /UPDATE commando's en kan het mij schelen of de gegevens die door een zoekopdracht worden geretourneerd deze wijzigingen op een bepaald moment missen?

Als het antwoord nee is, gebruik dan NOLOCK om de prestaties te verbeteren.

Ik heb zojuist snel gezocht naar de NOLOCK trefwoord in de codebasis voor Stack Overflow en vond 138 instanties, dus we gebruiken het op nogal wat plaatsen.

  1. Gids voor het ontwerpen van database voor online winkelwagentje in MySQL

  2. SQL Server-vergrendelingen - andere vergrendelingen die u moet kennen

  3. Hoe hernoem ik snel een MySQL-database (schemanaam wijzigen)?

  4. Hoe selecteer je alleen de eerste rijen voor elke unieke waarde van een kolom?