Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Лоша практика ли е NOLOCK (Sql Server намек)?

Преди да работя върху Stack Overflow, бях против NOLOCK на принципала, че потенциално бихте могли да извършите SELECT с NOLOCK и да получите обратно резултати с данни, които може да са остарели или непоследователни. Фактор, върху който трябва да помислите, е колко записа могат да бъдат вмъкнати/актуализирани по едно и също време друг процес може да избира данни от същата таблица. Ако това се случва често, тогава има голяма вероятност от блокиране, освен ако не използвате режим на база данни като READ COMMITED SNAPSHOT .

Оттогава промених гледната си точка за използването на NOLOCK след като видях как може да подобри SELECT производителност, както и премахване на блокиране на масово натоварен SQL Server. Има моменти, в които може да не ви пука, че вашите данни не са точно 100% ангажирани и имате нужда от резултати бързо, въпреки че може да са остарели.

Задайте си въпрос, когато мислите да използвате NOLOCK :

Моята заявка включва ли таблица, която има голям брой INSERT /UPDATE команди и интересува ли ме дали данните, върнати от заявка, може да липсват тези промени в даден момент?

Ако отговорът е не, тогава използвайте NOLOCK за подобряване на производителността.

Току-що извърших бързо търсене на NOLOCK ключова дума в кодовата база за Stack Overflow и открихме 138 екземпляра, така че я използваме на доста места.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Познайте връзките между всички таблици на базата данни в SQL Server

  2. Сравняване на дати, съхранени като varchar

  3. Влизания в SQL сървър между домейни с помощта на удостоверяване на Windows

  4. SQL Server:Заявка бързо, но бавно от процедура

  5. Как да активирате компресията на съществуваща таблица в SQL Server (T-SQL)