मैं आगे की प्रक्रिया के लिए एक अस्थायी तालिका में एक क्वेरी परिणाम स्टोर करने की कोशिश कर रहा हूं।MySQL 'क्यों डालें ... चुनें ...' अकेले चयन से बहुत धीमा है?
create temporary table tmpTest
(
a FLOAT,
b FLOAT,
c FLOAT
)
engine = memory;
insert into tmpTest
(
select a,b,c from someTable
where ...
);
लेकिन किसी कारण से डालने में एक मिनट तक लगते हैं, जबकि अकेले उप-चयन में केवल कुछ सेकंड लगते हैं। मेरे एसक्यूएल प्रबंधन टूल के आउटपुट में प्रिंट करने के बजाय डेटा को अस्थायी तालिका में लिखने में इतना लंबा समय क्यों लगेगा ???
अद्यतन मेरे सेटअप: MySQL 8 डेबियन लिनक्स NDB डेटा नोड्स 1 एसक्यूएल नोड (विंडोज सर्वर 2012)
तालिका मैं पर चुनिंदा चल रहा हूँ के साथ 7.3.2 क्लस्टर एक NDB है तालिका।
मैं, जानने की कोशिश करता है, तो का उपयोग करते समय कार्य योजना लागू करके अलग होता है 'में सम्मिलित ..', लेकिन वे एक ही लग रही है: (स्वरूपण के लिए खेद है, stackoverflow नहीं है टेबल्स)
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <subquery3> ALL \N \N \N \N \N \N 1 PRIMARY foo ref PRIMARY PRIMARY 3 <subquery3>.fooId 9747434 Using where 2 SUBQUERY someTable range PRIMARY PRIMARY 3 \N 136933000 Using where with pushed condition; Using MRR; Using temporary; Using filesort 3 MATERIALIZED tmpBar ALL \N \N \N \N 1000 \N
तालिका बनाएं ... चयन भी धीमा है। बिना टेबल डालने/बनाने के 47 सेकंड बनाम 5 सेकंड।
आपको अधिक विशिष्ट होना चाहिए और कुछ डेटा जो आप लिख रहे हैं उसे प्रदान करना चाहिए। इसके अलावा 'INSERT .. चयन करें' वाक्यविन्यास अलग है। आपके नमूने के परिणामस्वरूप त्रुटि होगी। –
अच्छा सवाल। मैं वास्तव में नहीं जानता कि कैसे mysql खुद के लिए 'स्मृति' रिजर्व करता है। यदि यह ओएस एपीआई के माध्यम से जाता है, तो यह सिर्फ स्मृति के लिए * पूछता है *, जिसे सिस्टम की स्थिति के अनुसार * * राम * या * हार्डड्राइव * स्पेस के रूप में कार्य किया जाएगा। विंडोज़ वर्चुअल बाइट्स प्रबंधन देखें। – Sebas
क्या आपने तुलना के लिए 'तालिका बनाएं ... SELECT'-type क्वेरी' की कोशिश की है? http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html – xiankai