Мінуси:
1. Це призведе до брудного читання
2. Застосовується лише до вибіркових запитних операторів
Переваги:
1. Деякі файли вказують, що ефективність запитів SQL за допомогою WITH (NOLOCK) можна підвищити на 33%.
2. Може використовуватися для внутрішніх операторів з'єднання
Брудне читання: Користувач вносить зміну в ресурс, і інший користувач випадково читає змінений запис, після чого перший користувач відмовляється від зміни, і дані повертаються до попередньої — ці два різні результати є брудним читанням.
Деталі:
Щоб покращити продуктивність SQL-запитів, загалом, першим кроком є створення індексу. Насправді, окрім встановлення індексів, коли ми розміщуємо SQL-команди, додавання розділу WITH (NOLOCK) до синтаксису може покращити явище LOCK-наборів даних у середовище з великою кількістю онлайн-запитів, що покращує продуктивність запитів.
Однак варто зазначити, що SQL SELECT з (NOLOCK) може спричиняти брудне читання.
Наприклад:
Окрім простого SELECT, ви також можете використовувати синтаксис SELECT з JOIN. Але команди ВИДАЛИТИ, ВСТАВИТИ, ОНОВИТИ та інші команди, що вимагають транзакцій, — це погано...
Деякі файли стверджують, що ефективність запитів SQL можна підвищити на 33% за допомогою WITH (NOLOCK). Додавання WITH (NOLOCK) повідомляє SQL Server, що наша команда SELECT не обов'язково враховує стан транзакційного блокування поточної таблиці, тому продуктивність значно покращиться, а феномен блокування системи баз даних значно зменшиться (включно з мертвим блокуванням).
Варто зазначити, що оскільки WITH (NOLOCK) не враховує блокування транзакцій поточної таблиці, тож коли деякі дані перебувають у кількох фазах (наприклад, транзакції між кількома таблицями — >наприклад, системи зняття коштів), WITH (NOLOCK) ігнорує дані, які зараз обробляють процес транзакції...
Простіше кажучи, при використанні NoLock він дозволяє читати дані, які були змінені, але транзакція ще не завершена. Тому, якщо вам потрібно враховувати цілісність транзакційних даних у реальному часі, варто ретельно подумати про використання WITH (NOLOCK).
Якщо вам не потрібно враховувати транзакції, WITH (NOLOCK) може бути корисним джерелом.
Примітка 1: З ( < table_hint > ) Визначає сканування таблиці, один або кілька індексів, які використовуються оптимізатором запитів, Або оптимізатор запитів, щоб використати цю таблицю даних і застосувати режим блокування для цього оператора.
Примітка 2: WITH (NOLOCK) еквівалентний READ UNCOMMITTED
|