sql >> Database >  >> RDS >> Sqlserver

Effect van NOLOCK-hint in SELECT-instructies

1) Ja , een selectie met NOLOCK wordt sneller voltooid dan een normale selectie.

2) Ja , een selectie met NOLOCK zal toestaan ​​dat andere zoekopdrachten op de betreffende tabel sneller worden voltooid dan een normale selectie.

Waarom zou dit zijn?

NOLOCK meestal (afhankelijk van je DB-engine) betekent geef me je gegevens, en het kan me niet schelen in welke staat het zich bevindt, en doe niet de moeite om het stil te houden terwijl je ervan leest. Het is allemaal tegelijk sneller, minder arbeidsintensief en heel erg gevaarlijk.

U moet worden gewaarschuwd om nooit een update uit te voeren of iets uit te voeren dat kritiek is op het systeem, of waar absolute correctheid vereist is met behulp van gegevens die afkomstig zijn van een NOLOCK lezen. Het is absoluut mogelijk dat deze gegevens rijen bevatten die zijn verwijderd tijdens het uitvoeren van de query of die zijn verwijderd in andere sessies die nog moeten worden afgerond. Het is mogelijk dat deze gegevens rijen bevatten die gedeeltelijk zijn bijgewerkt. Het is mogelijk dat deze gegevens records bevatten die de beperkingen van refererende sleutels schenden. Het is mogelijk dat deze gegevens rijen uitsluiten die aan de tabel zijn toegevoegd maar nog moeten worden vastgelegd.

Je kunt echt niet weten wat de status van de gegevens is.

Als u dingen probeert te krijgen zoals een rijtelling of andere samenvattingsgegevens waarbij een foutmarge acceptabel is, dan NOLOCK is een goede manier om de prestaties van deze query's te verbeteren en te voorkomen dat ze een negatieve invloed hebben op de databaseprestaties.

Gebruik altijd de NOLOCK hint met grote voorzichtigheid en behandel alle gegevens die het retourneert verdacht.



  1. Rij naar kolom transformatie in MySQL

  2. Oracle Instantclient installeren op Mac OS/X zonder omgevingsvariabelen in te stellen?

  3. Hoe kan ik mijn ad-hoc SQL testen met parameters in het Postgres-queryvenster?

  4. Hoe om te gaan met fouten in in SQL Server geneste transacties