Я пишу приложение. Есть 30 потоков, которые читают одну таблицу для ввода. Например.Увеличение производительности одновременных выборок и обновлений
Select top 1 name from table1 where flag != 1 order by mypriority
Теперь, когда имя считывается, бит столбца обновляется, чтобы отметить, что строка читается. Например.
Update table1 set flag = 1 where name = 'name'
Оператор обновления сразу после выбора. Проблема, с которой я столкнулся, что многие потоки читают одну и ту же строку и, таким образом, обрабатывают одно и то же имя, которое является повторяющейся работой.
Я пробовал:
Select top 1 name from table1 with (updlock) where flag != 1
Это делает одну строку для чтения в то время. И поток ждет завершения одного обновления. Таким образом, они могут читать следующее имя. Таким образом, нет выгоды от нескольких потоков.
Может ли кто-нибудь посоветовать лучший способ/способ использования.
Пожалуйста, спросите, если мой вопрос не очень ясен.
Есть ли причина, по которой вам нужно делать это «чтение» по одной строке за раз? Кроме того, у вас есть запрос с TOP, но не с ORDER BY. Это означает, что каждый раз, когда этот запрос запускается, вы можете получить другое значение для первой строки. –
@SeanLange: Я просто добавил заказ. Таким образом, эти потоки занимают одну строку, выполняют некоторую обработку и сохраняют результат в другой строке. Эта обработка похожа на посещение сайта и получение данных. –