MVCC может также быть реализован вручную путем добавления столбца номера версии к таблицам, и всегда выполнение вставляет вместо обновлений.
стоимость этого является намного большей базой данных, и медленнее выбирает, так как каждому нужен подзапрос для нахождения последней записи.
Это - отличное решение для систем, которые требуют аудита 100% для всех изменений.
truncate
- это то, что вы ищете. Если после этого вам нужно уменьшить размер db, запустите усадку.
В этой ссылке MSDN (если вы говорите о T-SQL) сравнивается скрытый процесс удаления строк и усечения.
" Удалить все строки " ... не будет УДАЛЕНИЕ ТАБЛИЦЫ (и повторного воссоздания пустой таблицы с той же схемой / индексами) предпочтительнее? (Мне лично нравится "начинать с нуля" ;-))
Сказанное TRUNCATE TABLE тоже вполне нормально, и да, DBCC SHRINKFILE может потребоваться позже, если вы захотите восстановить пространство.
В зависимости от размера полной базы данных сжатие может занять некоторое время; Я обнаружил, что он работает быстрее, если его сокращать меньшими кусками, вместо того, чтобы пытаться вернуть все сразу.
Одна вещь, о которой следует помнить при работе с таблицей усечения (а также с таблицей удаления), - это продвижение вперед, это не будет работать, если у вас когда-либо были внешние ключи, ссылающиеся на таблицу.
Как уже указывалось, если вы не можете использовать усечение или удаление
SELECT 1
WHILE @@ROWCOUNT <> 0
DELETE TOP (100000) MyTable
У вас есть нормальное решение (усечение + сжатие db) для удаления всех записей из таблицы.
Как указал Ирвин. Команда TRUNCATE не будет работать, если на нее ссылается ограничение внешнего ключа. Поэтому сначала отбросьте ограничения, обрежьте таблицу и воссоздайте ограничения.
Если вас беспокоит производительность и , это обычная процедура для вашей системы. Возможно, вы захотите изучить , переместив эту таблицу в собственный файл данных , а затем запустите shrink только для целевого файла данных!