(এটি মূলত @ ডেভির উত্তরের মন্তব্য ছিল, তবে আমি এটির নিজের উত্তরে রেখেছি কারণ এটি দীর্ঘ হয়ে গেছে)
TRUNCATE হয় একটি লগ অপারেশন। এটি অন্যথায় এটি এসিডি-কমপ্লায়েন্ট নয়। তবে TRUNCATEএবং এর মধ্যে পার্থক্য DELETE:
- লগ স্পেসের ব্যবহার:
TRUNCATEকেবলমাত্র লগগুলি পৃষ্ঠা / এক্সটেনটগুলি * মুক্ত করা হয়, তবে DELETEপৃথক সারিগুলিকে লগ করে।
- লক ব্যবহার:
TRUNCATEসাধারণত কম লক ব্যবহার করা হবে, যেহেতু এটি একটি টেবিল লক এবং পৃষ্ঠা লক নেয়, DELETEযার বিপরীতে সারি লকগুলি ** ব্যবহৃত হয়।
IDENTITYসিকোয়েন্সগুলি: TRUNCATEউপস্থিত থাকলে কোনও টেবিলে পরিচয় ক্রমটি পুনরায় সেট করে।
(* একটি মাত্রা = 8 পৃষ্ঠাগুলি। TRUNCATEতারা যদি সমস্ত এক টেবিল থেকে থাকে তবে লগগুলি লগ / সরিয়ে ফেলবে, অন্যথায় এটি মিশ্র এক্সটেন্টগুলি থেকে পৃষ্ঠাগুলি লগ / সরিয়ে ফেলবে।
** এর এক পার্শ্ব প্রতিক্রিয়া হ'ল DELETE FROM TABLEঅপারেশনটি একচেটিয়া টেবিল লক পেতে পারে কি না তার উপর নির্ভর করে টেবিলের জন্য বরাদ্দ করা খালি পৃষ্ঠাগুলি সম্ভাব্যভাবে ছেড়ে দিতে পারে))
সুতরাং (মূল প্রশ্নের কাছে ফিরে যান), আপনি যদি টেবিলটি ফাঁকা করে রাখেন তবে কাঠামোটি রাখতে চান (এনবি: অন্য টেবিলে বিদেশী কী দ্বারা উল্লেখ করা টেবিলে ব্যবহার করা যাবে না ) TRUNCATE TABLEতার চেয়ে শেষ পর্যন্ত ভাল ।DELETE FROM TABLETRUNCATE
@ টুলোর মন্তব্যে যেমন উল্লেখ করা হয়েছে, আপনার ডাটাবেসের পুনরুদ্ধারের মডেলটিও পরীক্ষা করে দেখুন - এটি যদি পূর্ণ থাকে তবে আপনাকে লগ ব্যাকআপ নেওয়া শুরু করতে হবে, বা আপনার পুনরুদ্ধারের মডেলটিকে সহজ করে তোলা উচিত। একবার আপনি যে কোনও একটি সম্পন্ন করে নিলে, সমস্ত খালি স্থানটি পুনরায় দাবি করতে আপনি সম্ভবত একবার লগ ফাইলটি একবারে বন্ধ অপারেশন হিসাবে সংকুচিত করতে চান (NB: লগ ফাইল কেবল )।
অবশেষে, আরেকটি বিষয় সম্পর্কে সচেতন হতে হবে - সারণী পরিসংখ্যান। চালানোর UPDATE STATISTICS <TABLENAME>' aftertruncate /DELETE` তাই ক্যোয়ারী অপ্টিমাইজার পুরাতন পরিসংখ্যান দ্বারা আপ হোঁচট খেয়েছি না হয়ে যায়।
TRUNCATE TABLEপরিবর্তে ব্যবহার করার পরামর্শ দিইDELETE FROM।