Hátrányok:
1. Rossz olvasmányt eredményez
2. Csak kiválasztott lekérdezési utasításokra vonatkozik
Előnyök:
1. Néhány fájl szerint az SQL lekérdezések hatékonysága WITH (NOLOCK) segítségével 33%-kal növelhető.
2. Használható belső csatlakozási utasításokhoz
Piszkos olvasmány: Egy felhasználó módosít egy erőforráson, egy másik felhasználó véletlenül elolvassa a módosított rekordot, majd az első felhasználó feladja a módosítást, és az adatok visszatérnek az előző módosításhoz, ezek a két különböző eredmény koszos olvasás.
Részletek:
Az SQL lekérdezések teljesítményének javítása érdekében általánosságban az első szempont egy index létrehozása. Valójában az indexek létrehozásán túl, amikor SQL parancsokat helyezünk el, egy WITH (NOLOCK) szakasz hozzáadása a szintaxishoz javíthatja azt a jelenséget, hogy az adathalmazok LOCK-olnak egy olyan környezetben, ahol sok online lekérdezés van, így javítva a lekérdezések teljesítményét.
Azonban egy dolog, amit érdemes megjegyezni, hogy az SQL SELECT (NOLOCK)-val is előfordulhat Dirty Read-et.
Például:
Az egyszerű SELECT mellett használhatod a SELECT szintaxist is a JOIN segítségével. De a DELETE, INSERT, UPDATE és más tranzakciókat igénylő parancsok nem jó...
Néhány fájl szerint az SQL lekérdezések hatékonysága 33%-kal növelhető WITH (NOLOCK) segítségével. A WITH (NOLOCK) hozzáadása azt jelzi, hogy a SELECT parancsnak nem kell figyelembe vennie a jelenlegi tábla tranzakciós zárolásának állapotát, így a teljesítmény jelentősen javul, és az adatbázis rendszer zárolási jelensége jelentősen csökken (beleértve a holtzárat is).
Egy fontos dolog, hogy mivel a WITH (NOLOCK) nem veszi figyelembe az aktuális tábla tranzakciós zárolását, így amikor van egy adat, amely több fázisban van (pl. tranzakciók több táblán keresztül – >pl. kivonási rendszerek), a WITH (NOLOCK) figyelmen kívül hagyja azokat az adatokat, amelyek éppen a tranzakciós folyamatot dolgozzák...
Őszintén szólva, a NoLock használata esetén lehetővé teszi az adatok olvasását, amelyeket módosítottak, de a tranzakció még nem fejeződött be. Ezért, ha figyelembe kell venned a tranzakciós adatok valós idejű integritását, alaposan gondold át a WITH (NOLOCK) használatát.
Ha nem kell tranzakciókat fontolóra venni, a WITH (NOLOCK) hasznos hivatkozás lehet.
1. megjegyzés: WITH ( < table_hint > ) Megadja a táblázat vizsgálatát, egy vagy több indexet, amelyet a lekérdezésoptimalizáló használ, Vagy a lekérdezésoptimalizáló segítségével ezt az adattáblát használhatod és a lock módot használhatod ehhez az utasításhoz.
2. megjegyzés: WITH (NOLOCK) egyenértékű a OLVASÁS ELKÖTELEZETÉVEL
|