मेरे पास एक ऐसा ऐप है जिसे बड़ी संख्या में प्रविष्टियों पर बड़ी मात्रा में डेटा अपडेट करने की आवश्यकता है। असल में यह कुछ 7,000 आवेषण और/या अपडेट करता है लेकिन इसमें बहुत समय लगता है (लगभग 9 मिनट ... प्रति क्वेरी 0.08 सेकेंड औसत)। अनिवार्य रूप से मैं ऐसे कई अनुरोध करने के लिए सामान्य गति अप की तलाश में हूं (मुझे अपने अस्पष्ट उदाहरण के लिए एक विशिष्ट उत्तर की उम्मीद नहीं है ... उम्मीद है कि, उम्मीद है कि, समझाने में मदद करें)।बड़ी संख्या में mysql अद्यतनों और आवेषणों को तेज करना
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:30:00-07:00') AND (planet_id = '2010_Gl_581_c')
INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:45:00-07:00') AND (planet_id = '2010_Gl_581_c')
INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
दोहराएँ बारंबार (अच्छी तरह से, लगभग 7,000 बार):
यहाँ अनुरोधों की रूपरेखा से कुछ नमूने हैं। यह एक अद्यतन है जो 24 घंटे की अवधि में अंतराल पर उत्पन्न डेटा एकत्र करता है और फिर प्रति दिन एक बार डेटाबेस में भारी अद्यतन करता है। सीमित बिट को देखते हुए मैंने दिखाया है कि आप इस प्रक्रिया को तेज करने के लिए कोई सुझाव हैं?
उदाहरण के लिए ... क्या प्रत्येक टाइमस्टैम्प के लिए चयन करने के बजाए यह समझ में आता है, क्या एक बार एक श्रेणी के लिए चयन करें और फिर स्क्रिप्ट में उन पर फिर से प्रयास करें?
थोड़ा की तरह:
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (planet_id = '2010_Gl_581_c')
असाइन कि $foo
के परिणाम और उसके बाद कार्य करें:
foreach ($foo as $bar)
{
if ($bar['timestamp'] == $baz) // where $baz is the needed timestamp
{
// do the insert here
}
}
संपादित करें: यह करने के लिए एक सा जोड़ने के लिए, एक बात है कि मेरी स्थिति में जवाबदेही में सुधार हुआ था मौजूदा रिकॉर्ड के लिए चेक किए गए कोड का एक गुच्छा बदलने के लिए और INSERT... ON DUPLICATE KEY UPDATE
एसक्यूएल क्वेरी का उपयोग करने के परिणामस्वरूप या तो एक डालने या अपडेट किया गया। इसके परिणामस्वरूप मेरे विशेष मामले में लगभग 30% की गति वृद्धि हुई क्योंकि यह समीकरण के बाहर डेटाबेस में कम से कम एक यात्रा काटता है और हजारों अनुरोधों से यह वास्तव में जुड़ जाता है।
+1। अच्छा कॉम्पेन्सिव जवाब। – sberry