Какова цель БЛОКИРОВКИ СТРОКИ на, Удаляют и когда я должен использовать ее?

Исключая)

Когда должен я использовать этот оператор:

DELETE TOP (@count)
FROM ProductInfo WITH (ROWLOCK)
WHERE ProductId = @productId_for_del;

И когда должен просто делать:

DELETE TOP (@count)
FROM ProductInfo
WHERE ProductId = @productId_for_del;
18
задан TheGameiswar 18 November 2016 в 17:14
поделиться

2 ответа

with (rowlock) - это подсказка, которая указывает базе данных, что она должна сохранять блокировки в области строки. Это означает, что база данных будет избегать увеличения блокировок до области видимости блока или таблицы.

Вы используете подсказку, когда запрос затронет только одну или несколько строк, чтобы предотвратить блокировку строк, которые не будут удалены запросом. Это позволит другому запросу одновременно читать несвязанные строки вместо того, чтобы ждать завершения удаления.

Если вы используете его в запросе, который удалит много строк, это может снизить производительность, поскольку база данных будет пытаться избежать увеличения блокировок до более широкой области, даже если это было бы более эффективно.

Обычно вам не нужно добавлять такие подсказки к запросу, потому что база данных знает, какой тип блокировки использовать. Такие подсказки следует добавлять в запрос только в ситуациях, когда возникают проблемы с производительностью из-за того, что база данных приняла неверное решение.

24
ответ дан 30 November 2019 в 08:03
поделиться

Блокировка строк - это подсказка запроса, которую следует использовать с осторожностью (как и все подсказки запроса).

Если его не указывать, это, скорее всего, приведет к тому же поведению, и при условии, что это не гарантирует, что будет использоваться только блокировка строк, это всего лишь подсказка.Если у вас нет очень глубоких знаний о конфликте блокировок, скорее всего, оптимизатор выберет наилучшую стратегию блокировки, и эти вещи обычно лучше оставить на усмотрение механизма базы данных.

ROWLOCK означает, что SQL заблокирует только затронутую строку, а не всю таблицу или страницу в таблице, где хранятся данные, при выполнении удаления. Это повлияет только на других людей, читающих из таблицы, в то время как выполняется ваше удаление.

Если используется блокировка таблицы, все запросы к таблице будут ждать, пока не будет завершено удаление, при блокировке строки выбирается только чтение, определенные строки будут заставлены ждать.

Удаление верхних N, где N - количество строк, в любом случае, скорее всего, заблокирует таблицу.

6
ответ дан 30 November 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: