আমার কাছে "সেরা" উত্তর নেই, তবে আমার কাছে একটি "ন্যূনতম খারাপ" উত্তর আছে যা আপনাকে যুক্তিসঙ্গতভাবে দ্রুত সম্পন্ন করতে দেয়।
আমার টেবিলটিতে 2 মিমি সারি ছিল এবং আমি যখন প্রথমটিতে ডিফল্ট হয়েছিল এমন একটি গৌণ টাইমস্ট্যাম্প কলাম যুক্ত করার চেষ্টা করছিলাম তখন আপডেটের পারফরম্যান্সটি খনন করা হয়েছিল।
ALTER TABLE mytable ADD new_timestamp TIMESTAMP ;
UPDATE mytable SET new_timestamp = old_timestamp ;
ALTER TABLE mytable ALTER new_timestamp SET NOT NULL ;
এটি 40 মিনিটের জন্য স্থির থাকার পরে, এটি কতটা সময় নিতে পারে তার ধারণা পেতে আমি একটি ছোট ব্যাচে চেষ্টা করেছিলাম - পূর্বাভাসটি প্রায় 8 ঘন্টা ছিল।
গৃহীত উত্তর অবশ্যই ভাল - তবে এই টেবিলটি আমার ডেটাবেজে প্রচুর ব্যবহার করা হয়। এটিতে কয়েক ডজন টেবিল রয়েছে যা এফকেইওয়াই; আমি অনেকগুলি টেবিলে বিদেশী কীগুলি স্যুইচ করা এড়াতে চেয়েছিলাম। এবং তারপরে মতামত রয়েছে।
কিছুটা দস্তাবেজ, কেস-স্টাডি এবং স্ট্যাক ওভারফ্লো অনুসন্ধান করছে এবং আমার কাছে "এ-হা!" মুহূর্ত। ড্রেনটি মূল আপডেটে ছিল না, তবে সমস্ত আইএনডেক্স অপারেশনে ছিল। আমার টেবিলটিতে এটিতে 12 টি সূচক ছিল - অনন্য বাধার জন্য কয়েকটি, ক্যোয়ারী পরিকল্পনাকারীকে গতি বাড়ানোর জন্য কয়েকটি এবং পুরো পাঠ্য অনুসন্ধানের জন্য কয়েকটি।
প্রতিটি সারি যা আপডেট করা হয়েছিল কেবল একটি মুছে ফেলা / INSERT এ কাজ করে না, প্রতিটি সূচকে পরিবর্তন করে ও সীমাবদ্ধতাগুলি পরীক্ষা করার ওভারহেডও ছিল।
আমার সমাধানটি ছিল প্রতিটি সূচি এবং সীমাবদ্ধতা বাদ দেওয়া, সারণি আপডেট করা এবং তারপরে সমস্ত সূচি / সীমাবদ্ধতাগুলি আবার যুক্ত করে।
এসকিউএল লেনদেন লিখতে প্রায় 3 মিনিট সময় লেগেছিল যা নিম্নলিখিতগুলি করেছে:
- শুরু;
- ছাড়ানো সূচক / স্থিরতা
- আপডেট টেবিল
- সূচি / সীমাবদ্ধতা পুনরায় যুক্ত করুন
- কমিট;
স্ক্রিপ্টটি চালাতে 7 মিনিট সময় নিয়েছিল।
গৃহীত উত্তরটি অবশ্যই আরও ভাল এবং আরও সঠিক ... এবং ডাউনটাইমের প্রয়োজন কার্যত অপসারণ করে। আমার ক্ষেত্রে যদিও, এটি সমাধানটি ব্যবহার করতে উল্লেখযোগ্যভাবে আরও "বিকাশকারী" কাজটি গ্রহণ করতে পারত এবং আমাদের কাছে নির্ধারিত ডাউনটাইমের 30 মিনিটের উইন্ডো ছিল যা এটি সম্পন্ন হতে পারে Our আমাদের সমাধান এটি 10 এ সম্বোধন করেছিল।
ALTER TABLE .. ADD COLUMN ...
বা সেই অংশটিরও উত্তর দেওয়া হবে?