2011-11-22 20 views
5

आदेश का उपयोग करते समय:MySQL प्राथमिक कुंजी ड्रॉप करने के लिए एक अस्थायी तालिका का उपयोग क्यों करता है?

ALTER TABLE my_table DROP PRIMARY KEY; 

राज्य (जब शो PROCESSLIST) के रूप में प्रकट होता है:

copy to tmp table 

क्यों यह एक प्राथमिक कुंजी बाधा "ड्रॉप" करने के लिए एक tmp तालिका का उपयोग करने की आवश्यकता होगी?

+0

"कार्यान्वयन विस्तार" ;-) मैं अंतर्निहित डेटा क्लस्टरिंग परिवर्तन शक - जैसे यह उस विशेष इंजन में "ढेर" या अन्यथा पुनः क्लस्टर में जाता है? (? InnoDB MyISAM?) के बाद से यह एक DDL आपरेशन है - और नहीं एक आम एक - "सबसे आसान तरीका है" अक्सर "सबसे अच्छा तरीका है", खासकर अगर यह अच्छी तरह से परीक्षण किया/सत्यापित कोड रास्तों का पुन: उपयोग कर सकते हैं। –

उत्तर

5

एक समग्र प्राथमिक कुंजी के मामले पर विचार करें। इस मामले में, डीबी इंजन एक कृत्रिम कुंजी है, जो आगे बढ़ पंक्तियों के आसपास की आवश्यकता होगी से एक नया संकुल अनुक्रमणिका बनाने के लिए है। (ध्यान रखें कि पंक्तियों शारीरिक रूप से प्राथमिक कुंजी द्वारा डिस्क पर आदेश दिया जाता है में रखें।) इस स्थिति की दुर्लभता को देखते हुए, यह वास्तव में विशेष मामला है जहाँ आपके प्राथमिक कुंजी पहले से ही एक पूर्णांक है से निपटने के लायक नहीं है।

संबंधित मुद्दे