केवल एक चीज है जो आप गायब हैं। विशेष रूप से, अगर आप InnoDB का उपयोग कर रहे हैं, तो आप स्पष्ट रूप से अपने SELECT कथन में खंड एक ORDER BY जोड़ने के लिए सुनिश्चित करने के लिए आप प्राथमिक कुंजी में पंक्तियों डालने रहे हैं चाहते है (संकुल इंडेक्स) आदेश:
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id
पर विचार करें माध्यमिक अनुक्रमणिका को हटाने बैकअप तालिका पर यदि उनकी आवश्यकता नहीं है। यह सर्वर पर कुछ लोड भी बचाएगा। ,
LOCK TABLES product_backup WRITE;
LOCK TABLES product_id READ;
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
UNLOCK TABLES;
ताला सामान शायद एक बड़ा फर्क नहीं होंगे पंक्ति ताला के रूप में:
अंत में, यदि आप InnoDB का उपयोग कर रहे, पंक्ति ताले कि आवश्यकता होती है और सिर्फ स्पष्ट रूप से दोनों तालिकाओं ताला की संख्या को कम बहुत तेज़ है (हालांकि टेबल लॉक के रूप में तेज़ नहीं है), लेकिन जब से आपने पूछा था।
स्रोत
2012-06-25 13:06:41
मैं सोचता है कि यह सबसे अच्छा तरीका है। इस तरह आप इंडेक्स को भी संरक्षित कर रहे हैं। –
स्पीडवाइज जितना अच्छा हो उतना अच्छा है। जब तक सभी डेटा कॉपी नहीं किए जाते हैं, तब तक आप बैकअप तालिका पर इंडेक्स सृजन को रोक सकते हैं, इससे सम्मिलन की गति में काफी वृद्धि होगी। – fvu
यह दिलचस्प है, धन्यवाद। मैं डेटा की प्रतिलिपि के बारे में जानबूझकर था और सोच रहा था कि क्या यह डेटाबेस पर एक नाली थी ('चयन *' ने मुझे फेंक दिया, या अगर क्वेरी का निर्माण करने के तरीके में प्रक्रिया करने में लंबा समय लगेगा)। यदि यह डेटा को कॉपी करने का एक स्वीकार्य तरीका है तो यह ठीक है। – crmpicco