Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 10821|Odpověď: 0

[Zdroj] sql SELECT

[Kopírovat odkaz]
Zveřejněno 08.01.2016 17:58:31 | | |

Dříve jsem viděl, jak moji zkušení vývojáři používají WITH (NOLOCK) při dotazování v SQL Serveru a divím se, proč je používají. Teď jsem to prozkoumal a zjistil, že je užitečné pro zlepšení výkonu při provádění dotazu. Nicméně jeho používání má nevýhodu. Nevýhodou je, že si nemusíte být jisti, zda dostáváte data, která jsou právě aktualizována v tabulce, tj. Bez ochrany zámku nelze mít jistotu, že data nejsou mění se během doby, kdy dotaz běží. Odkázal jsem na tento odkaz a přišel mi docela užitečný.

Pro zlepšení výkonu SQL dotazů je obecně prvním cílem vytvořit index. Ve skutečnosti, kromě nastavení indexů, když umístíme SQL příkazy, může přidání sekce WITH (NOLOCK) do syntaxe zlepšit fenomén LOCKování datových sad v prostředí s velkým počtem online dotazů, čímž se zlepšuje výkon dotazů.

Nicméně je třeba si uvědomit, že SQL SELECT s (NOLOCK) může způsobit špatné čtení.

Například:




Protože SQL Server provádí odpovídající kontrolu konzistence zámků. Pro zlepšení celkového výkonu databázových dotazů přidejte WITH (NOLOCK) na konec názvu tabulky ve své syntaxi SELECT, i když (NOLOCK) je také přijatelné, ale Microsoft stále doporučuje přidat WITH.

Kromě jednoduchého SELECT můžete také použít syntaxi SELECT s JOIN. Ale příkazy DELETE, INSERT, UPDATE a další příkazy, které vyžadují transakce nejsou dobré...

Některé soubory uvádějí, že efektivitu SQL dotazů lze zvýšit o 33 % pomocí WITH (NOLOCK).
Přidání WITH (NOLOCK) říká SQL Serveru, že příkaz SELECT nemusí zohledňovat stav uzamčení transakce v aktuální tabulce, takže výkon bude výrazně zlepšen a jevy zámků databázového systému budou výrazně sníženy (včetně mrtvého zácpu).

Jedna věc, kterou je třeba poznamenat, je, že protože WITH (NOLOCK) nezohledňuje zámek transakce v aktuální tabulce, takže když jsou některá data ve více fázích transakce (např. transakce přes více tabulek – > například systém výběru), WITH (NOLOCK) ignoruje data, která právě zpracovávají proces transakce...

Jednoduše řečeno, při použití NoLocku umožňuje číst data, která byla upravena, ale transakce ještě nebyla dokončena. Pokud tedy potřebujete zvážit integritu transakčních dat v reálném čase, měli byste pečlivě zvážit použití WITH (NOLOCK).

Pokud nemusíte brát v úvahu transakce, může být užitečným zdrojem WITH (NOLOCK).

Poznámka 1: WITH ( < table_hint > )
Specifikuje skenování tabulky, jeden nebo více indexů používaných optimalizátorem dotazu,
Nebo optimalizátorem dotazů, který využívá tuto datovou tabulku a používá režim zámku pro tento výrok.

Poznámka 2: WITH (NOLOCK) je ekvivalentní READ UNCOMMITTED

Nakonec si pojďme promluvit o několika drobných rozdílech mezi nolockem a with(nolock):
1: Synonyma v SQL05 jsou podporována pouze s (nolock);
2: s (nolock) se zapisuje velmi snadno a pak se specifikuje index.
Při dotazování příkazů napříč servery nelze použít pouze s (nolock), pouze nolock
Při dotazování na stejném serveru lze použít jak (nolock), tak nolock
Jako co
SQL kód
select * from [IP].a.dbo.table1 s (nolock) To vás vyzve k chybě select * from a.dbo.table1 with (nolock) Toto bude fungovat




Předchozí:C# skrývá prostřední číslici ID čísla
Další:JQUERY načítá JS pomocí Ajax
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com