2010-07-19 16 views
5

मैं इस तरह एक प्रश्न के साथ एक अस्थायी तालिका बनाने हूँ:नियमित तालिका से अस्थायी तालिका में इंडेक्स पास करें?

CREATE TEMPORARY TABLE temp_table 
SELECT * FROM regular_table 
WHERE 1 

लेकिन regular_table क्षेत्रों में से कुछ पर की प्रतिलिपि प्राप्त सूचकांक है। मैं नई अस्थायी तालिका पर FULLTEXT खोज करने का प्रयास करता हूं और मुझे बताते हुए त्रुटि मिलती है "कॉलम सूची से मेल खाने वाले FULLTEXT अनुक्रमणिका नहीं मिल सका"। तो obviusly सूचकांक नई तालिका में कॉपी नहीं कर रहा है। क्या इसे मजबूर करने का कोई तरीका है?

धन्यवाद।

उत्तर

10

आप CREATE TEMPORARY TABLE temp_table LIKE regular_table इस्तेमाल कर सकते हैं, लेकिन यह सभी अनुक्रमित पैदा करेगा, इसलिए जब आप INSERT INTO temp_table SELECT * FROM regular_table करते हैं, अनुक्रमित बनाया जाएगा - जो लंबा हो सकता है।

या, आप तालिका बनाने और सूचकांक बाद में जोड़ सकते हैं:

CREATE TEMPORARY TABLE temp_table 
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz) 
INSERT INTO temp_table SELECT * FROM regular_table 

लेकिन सूचकांक, फिर से, हर डालने पर अद्यतन किया जाएगा। को छोड़कर यह एक में होगा फिर

CREATE TEMPORARY TABLE temp_table 
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz) 
ALTER TABLE temp_table DISABLE KEYS 
INSERT INTO temp_table SELECT * FROM regular_table 
ALTER TABLE temp_table ENABLE KEYS 

, आप के लिए सूचकांक का निर्माण करने की प्रतीक्षा करनी होगी,:

शायद सबसे कारगर तरीका अस्थायी तालिका बनाने के लिए, सभी डालें, बाद में सूचकांक का निर्माण होगा पिछले अल्टर स्टेटमेंट के साथ, खंड।

+0

धन्यवाद! .. शायद यह एक छोटा सा अनदेखा है, लेकिन मेरा मानना ​​है कि आपको 'वैकल्पिक तालिका टैबलेट' रखना होगा, मुझे बस 'अल्टर टैबलेटनाम' के साथ एक त्रुटि मिली .. जानकारी के लिए धन्यवाद! –

+0

@ जॉन ईसाक्स: आपका स्वागत है; सुधार के लिए धन्यवाद - संपादित। – Piskvor

2

एक अस्थायी तालिका बिल्कुल किसी अन्य तालिका के समान ही है, सिवाय इसके कि इसे सत्र के अंत में छोड़ दिया जाएगा। एक ही इंडेक्स (डेटाबेस के भीतर से) रखने का एकमात्र तरीका उन्हें टेबल पर बनाना है क्योंकि आप किसी अन्य तालिका के रूप में हैं।

अब एक हैक है। आप डिस्क पर भौतिक फाइलों को डिस्क पर प्रतिलिपि बना सकते हैं और तालिका का एक क्लोन है जिसमें इंडेक्स शामिल हैं लेकिन मुझे लगता है कि आप इसे ऐप के भीतर कर रहे हैं ताकि यह बहुत व्यावहारिक न हो।

+0

नोट: यह केवल MyISAM (InnoDB या अन्य नहीं) के लिए काम करता है, और संभवतः रूट विशेषाधिकारों की आवश्यकता होती है। – Piskvor

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