sql >> Databáze >  >> RDS >> Sqlserver

Účinek nápovědy NOLOCK v příkazech SELECT

1) Ano , vyberte pomocí NOLOCK dokončí se rychleji než normální výběr.

2) Ano , vyberte pomocí NOLOCK umožní ostatním dotazům proti ovlivněné tabulce dokončit rychleji než normální výběr.

Proč by tomu tak bylo?

NOLOCK obvykle (v závislosti na vašem DB motoru) znamená, že mi dáte svá data a je mi jedno, v jakém stavu jsou, a neobtěžujte se je držet v klidu, když z nich čtete. Je to všechno najednou rychlejší, méně náročné na zdroje a velmi velmi nebezpečné.

Měli byste být varováni, abyste nikdy neprováděli aktualizaci nebo neprováděli nic kritického pro systém nebo kde je vyžadována absolutní správnost s použitím dat pocházejících z NOLOCK číst. Je zcela možné, že tato data obsahují řádky, které byly odstraněny během běhu dotazu nebo které byly odstraněny v jiných relacích, které ještě nebyly dokončeny. Je možné, že tato data obsahují řádky, které byly částečně aktualizovány. Je možné, že tato data obsahují záznamy, které porušují omezení cizího klíče. Je možné, že tato data nezahrnují řádky, které byly přidány do tabulky, ale ještě nebyly potvrzeny.

Ve skutečnosti nemáte žádný způsob, jak zjistit, jaký je stav dat.

Pokud se snažíte získat věci, jako je počet řádků nebo jiná souhrnná data, kde je přijatelná určitá míra chyby, pak NOLOCK je dobrý způsob, jak zvýšit výkon těchto dotazů a vyhnout se jejich negativnímu dopadu na výkon databáze.

Vždy používejte NOLOCK naznačujte velmi opatrně a zacházejte se všemi daty, která vrátí, podezřele.



  1. Řízení bezpečnosti dat

  2. Index pro nalezení prvku v poli JSON

  3. Funkce JSON_OBJECT() v Oracle

  4. ORA-01034:ORACLE není k dispozici ORA-27101:sféra sdílené paměti neexistuje