Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 10821|Відповідь: 0

[Джерело] SQL SELECT

[Копіювати посилання]
Опубліковано 08.01.2016 17:58:31 | | |

Я бачив, як мої старші розробники використовують WITH (NOLOCK) при запитах у SQL Server, і дивуюся, чому вони це роблять. Тепер я дослідив це і зрозумів, що це корисно для покращення продуктивності виконання запиту. Однак у його використанні є й недолік. Недолік у тому, що можна не бути впевненим, що отримуєш дані, які зараз оновлюються в таблиці, тобто без захисту від блокування не можна бути гарантованим, що дані не оновлені змінюється під час виконання запиту. Я передав це посилання і вважав його досить корисним.

Щоб покращити продуктивність SQL-запитів, загалом, першим кроком є створення індексу. Насправді, окрім встановлення індексів, коли ми розміщуємо SQL-команди, додавання розділу WITH (NOLOCK) до синтаксису може покращити явище LOCK-наборів даних у середовище з великою кількістю онлайн-запитів, що покращує продуктивність запитів.

Однак варто зазначити, що SQL SELECT з (NOLOCK) може спричинити брудне читання.

Наприклад:




Тому що SQL Server виконує відповідну перевірку узгодженості замків. Щоб покращити загальну продуктивність запитів до бази даних, додайте WITH (NOLOCK) до кінця імені таблиці в синтаксисі SELECT, хоча (NOLOCK) також прийнятний, але Microsoft все одно рекомендує додати WITH.

Окрім простого 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

Нарешті, давайте поговоримо про кілька невеликих відмінностей між nolock і with(nolock):
1: У SQL05 підтримуються синоніми лише з (nolock);
2: з (nolock) записується дуже просто, а потім вказує індекс.
Під час запиту операторів між серверами не можна використовувати з (nolock), лише nolock
Під час запиту на одному сервері можна використовувати як з (nolock), так і з nolock
Наприклад, що саме
SQL-код
select * з [IP].a.dbo.table1 з (nolock) Це запросить вас з помилкою select * з a.dbo.table1 з (nolock) Це спрацює




Попередній:C# приховує середню цифру ідентифікаційного номера
Наступний:jQuery завантажує JS за допомогою ajax
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com