То, как делают я убыстряюсь, удаляет из большой таблицы базы данных?

Два трюка . В основном, инвертирование HTML-кода ваших желаемых элементов в HTML и использование ~ Оператора следующего сиблинга :

float-right + инвертирует порядок HTML элементы

div{ /* Do with the parent whatever you know just to make the
  inner float-right elements appear where desired */
  display:inline-block;
}
span{
  float:right;  /* float-right the elements! */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
  background:red;
} 
<div>
  <!-- Reverse the order of inner elements -->
  <span>5</span>
  <span>4</span>
  <span>3</span>
  <span>2</span>
  <span>1</span>
</div>


Родитель с direction: rtl; + инвертирует порядок внутренних элементов

.inverse{
  direction: rtl;
  display: inline-block; /* inline-block to keep parent at the left of window */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
  background:gold;
}
Hover one span and see the previous elements being targeted!<br>

<div class="inverse">
  <!-- Reverse the order of inner elements -->
  <span>5</span>
  <span>4</span>
  <span>3</span>
  <span>2</span>
  <span>1</span>
</div>

22
задан Eric Z Beard 21 July 2009 в 12:26
поделиться

4 ответа

Вот решение вашей проблемы.

DECLARE @RC AS INT
SET @RC = -1

WHILE @RC <> 0
BEGIN
    DELETE TOP(1000000) FROM [Archive_CBO_ODS].[CBO].[AckItem] WHERE [AckItemId] >= 300
    SET @RC = @@ROWCOUNT
    --SET @RC = 0
END
-1
ответ дан 29 November 2019 в 01:49
поделиться

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

1
ответ дан 29 November 2019 в 01:49
поделиться

См.: Оптимизация удаления на SQL Server

Эта статья поддержки MS может представлять интерес: Как решить проблемы с блокировкой, вызванные эскалацией блокировки в SQL Server :

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

 УДАЛИТЬ ИЗ сообщений журнала, ГДЕ LogDate <'2/1/2002' 

Удалив эти записи несколько сто за раз, вы можете резко сократить количество блокировки, которые накапливаются за транзакцию и предотвратить эскалацию блокировки. За пример:

 SET ROWCOUNT 500
delete_more:
 УДАЛИТЬ ИЗ сообщений журнала, ГДЕ LogDate <'2/1/2002'
ЕСЛИ @@ ROWCOUNT> 0 НАЙТИ delete_more
УСТАНОВИТЬ ROWCOUNT 0

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

27
ответ дан 29 November 2019 в 01:49
поделиться

Если вы используете SQL 2005 или 2008, возможно, вам поможет «изоляция моментальных снимков». Он позволяет данным оставаться видимыми для пользователей во время обработки базовой операции обновления данных, а затем показывает данные сразу после их фиксации. Даже если запуск удаления занимает 30 минут, ваши приложения в это время останутся в сети.

Вот краткое руководство по блокировке моментальных снимков:

http://www.mssqltips.com/tip.asp?tip=1081

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

0
ответ дан 29 November 2019 в 01:49
поделиться
Другие вопросы по тегам:

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