У меня есть таблица с 300 000 строк и 30 столбцов. Как я могу быстро его очистить? Если я делаю запрос DROP FROM MyTable
, это займет много времени. Я пытаюсь следующей хранимая процедура в основном сделать копию таблицы без каких-либо данных, удаление исходной таблицы и переименуйте новую таблицу как оригинал:Каков самый быстрый способ очистки таблицы SQL?
USE [myDatabase]
GO
SET ANSI_NULLS_ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ClearTheTable]
AS
BEGIN
SET NOCOUNT ON;
SELECT * INTO tempMyTable FROM MyTable WHERE 1 = 0;
DROP TABLE MyTable
EXEC sp_rename tempMyTable, MyTable;
END
Это заняло около 7 минут, чтобы бежать. Есть ли более быстрый способ сделать это? Мне не нужны никакие регистрации, откаты или что-то в этом роде.
Если это имеет значение, я вызываю хранимую процедуру из приложения C#. Думаю, я мог бы написать код для воссоздания таблицы с нуля после выполнения DROP TABLE
, но я не хотел перекомпилировать приложение в любое время, когда колонка будет добавлена или изменена.
Спасибо!
EDIT
Вот мой обновленный хранимая процедура:
USE [myDatabase]
GO
SET ANSI_NULLS_ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ClearTheTable]
AS
BEGIN
SET NOCOUNT ON;
ALTER DATABASE myDatabase
SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
TRUNCATE TABLE MyTable
ALTER DATABASE myDatabase
SET MULTI_USER
END
Как насчет использования 'TRUNCATE'? –
truncate сохранит только скелет вашей таблицы, очистив все значения. Убедитесь, что у него нет ограничений. – mohan111
http://stackoverflow.com/questions/24213299/how-to-delete-large-data-of-table- in-sql-without-log – mohan111