🚀 DELETE vs TRUNCATE у SQL: урок, який я засвоїв на власному досвіді

Кілька років тому я думав, що DELETE і TRUNCATE — це майже одне й те саме. Обидва ж видаляють рядки, правда?

Поки одного дня мені не довелося очистити 10 мільйонів рядків з таблиці.

Як справжній новачок, я впевнено набрав у SQL:

DELETE FROM big_table;

Запит виконувався… і виконувався… і виконувався.

⚡ Система почала гальмувати.
⚡ Таблиця заблокувалася.
⚡ Інші задачі почали падати.

Усе через те, що я обрав DELETE, тоді як потрібно було використати TRUNCATE.

Цей болючий досвід дав мені урок, який повинен знати кожен SQL-розробник:

DELETE vs ✅ TRUNCATE

На перший погляд, обидва видаляють дані з таблиці. Але під капотом вони дуже різні.

1. DELETE → DML (Data Manipulation Language)

  • Видаляє рядки по одному
  • Можна використовувати WHERE, щоб фільтрувати конкретні рядки
  • Генерує лог для кожного видаленого рядка → повільно при великій кількості даних
  • Підтримує rollback, якщо обгорнути в транзакцію

Приклад: Видалити лише неактивних користувачів:

DELETE FROM users
WHERE status = 'inactive';

👉 Ідеально, коли потрібен контроль над тим, які рядки видаляти.

2️⃣ TRUNCATE → DDL (Data Definition Language)

  • Видаляє всі рядки миттєво
  • WHERE не дозволяється (все або нічого)
  • Скидає identity/auto-increment колонки до початкового значення
  • Мінімальне логування → значно швидше
  • Автокоміт у більшості баз даних → неможливо відкотити

Приклад: Очистити всю таблицю staging перед повторним завантаженням:

TRUNCATE TABLE staging_orders;

👉 Ідеально, коли потрібен контроль над тим, які рядки видаляти.

2. TRUNCATE → DDL (Data Definition Language)

  • Видаляє всі рядки миттєво
  • WHERE не дозволяється (все або нічого)
  • Скидає identity/auto-increment колонки до початкового значення
  • Мінімальне логування → значно швидше
  • Автокоміт у більшості баз даних → неможливо відкотити

Приклад: Очистити всю таблицю staging перед повторним завантаженням:

TRUNCATE TABLE staging_orders;

👉 Ідеально, коли важлива швидкість і не цікавлять індивідуальні видалення рядків.

🔍 Швидке порівняння

Реальний приклад

Уявіть таблицю staging, яка завантажується щоночі:

  • Якщо використати DELETE, доведеться сканувати мільйони рядків і система почне гальмувати.
  • Якщо використати TRUNCATE, таблиця очищується миттєво і готова до нового завантаження.

Але якщо потрібно видалити лише погані записи за вчорашній день — тоді має сенс DELETE з WHERE.

💡 Урок

  • Потрібен контроль → використовуйте DELETE.
  • Потрібна швидкість → використовуйте TRUNCATE.

SQL — це не просто знання команд, а уміння знати, коли яку застосовувати.

Наступного разу, коли чиститимеш таблицю, запитай себе:

  • Потрібно вибірково видаляти рядки? → DELETE
  • Потрібна просто чиста таблиця? → TRUNCATE

Твоя система (і колеги) скажуть тобі спасибі.


👉 Твоя черга:
Чи траплялося тобі використовувати неправильну SQL-команду і шкодувати про це потім?

Якщо цей матеріал був корисним:

👍 Постав clap, якщо сподобалося!
🧠 Хочеш більше про SQL, дата-інженерію та сучасний стек обробки даних? Підписуйся на мене на Medium: @workwithalam

🔗 З’єднаймося в LinkedIn — ділюся практичними порадами, інсайтами індустрії та реальними уроками з роботи з даними:www.linkedin.com/in/sahil-alam-680986173/

Дякую за прочитання! 🙌

Хештеги для посту:

#SQL #DatabaseTips #DeleteVsTruncate #SQLPerformance #DataEngineering #DBA #LearningSQL #BackendDevelopment #DataManagement #TechTips #QueryOptimization #DatabaseDesign #SQLBasics #DataLife #SoftwareEngineering

ОРИГІНАЛ СТАТТІ:🚀 DELETE vs TRUNCATE in SQL: The Lesson I Learned the Hard Way

АВТОР СТАТІ:Sahil Alam

🚀Долучайтесь до нашої спільноти Telegram:

🚀Долучайтесь до нашої спільноти FaceBook:

🚀Долучайтесь до нашої спільноти Twiter X:

Leave a Reply