लूप के प्रत्येक पुनरावृत्ति के दौरान आपको बाइंडपरम() की आवश्यकता नहीं है। BindParam() चर $v1, $v2, आदि को संदर्भ द्वारा बाध्य करने का कारण बनता है , इसलिए आपको बस इतना करना है कि इन वेरिएबल्स के मानों को बदल दें और फिर क्वेरी को फिर से निष्पादित करें। इससे ओवरहेड में कटौती हो सकती है।
इसके अलावा आप लूप के माध्यम से हर बार अंतराल() को कॉल करने से बच सकते हैं। बस सुनिश्चित करें कि $cloneCount को जबरन एक बार पूर्णांक बनाने के लिए बाध्य किया गया है , लूप से पहले। यह एक बहुत ही मामूली सुधार है, लेकिन यह अच्छा अभ्यास है।
$cloneCount = (int) $cloneCount;
... 9 other bindParam
$insertG->bindParam(':v1', $v1, PDO::PARAM_STR);
$insertG->bindParam(':v2', $v2, PDO::PARAM_INT);
for ($i=0; $i < $cloneCount; $i++)
{
$v1 = /* something */
$v2 = /* something */
$insertG->execute();
}
आपको ऑटोोकॉमिट से भी बचना चाहिए। एक स्पष्ट लेनदेन शुरू करके MySQL प्रति स्टेटमेंट निष्पादन के लेनदेन ओवरहेड को कम करें। /ए> , कई हज़ार पंक्तियाँ सम्मिलित करना, और फिर लेन-देन करना।
लेकिन एक ही तालिका में हजारों समान पंक्तियों के थोक INSERT को गति देने का सबसे अच्छा तरीका है डेटा स्थानीय जानकारी लोड करें INSERT के बजाय। यह पंक्ति दर पंक्ति INSERT की तुलना में 10-20x तेज चलता है, भले ही आप पैरामीटर, लेन-देन, बहु-पंक्ति सम्मिलन, और किसी भी अन्य चाल का उपयोग कर सकते हैं जिसके बारे में आप सोच सकते हैं।
यहां तक कि अगर आपको अपने डेटा को डिस्क पर .CSV फ़ाइल में लिखने के लिए PHP का उपयोग करना है और फिर उस फ़ाइल पर LOAD DATA LOCAL INFILE का उपयोग करना है, तो यह अभी भी बहुत तेज़ है।
यह भी देखें इन्सर्ट स्टेटमेंट की गति अधिक युक्तियों के लिए MySQL मैनुअल में।