पहले अपनी स्क्रिप्ट को अनुकूलित करने का प्रयास करें। सबसे पहले, आयात करते समय कभी भी एकल प्रश्न न चलाएं जब तक कि आपके पास कोई अन्य विकल्प न हो, नेटवर्क ओवरहेड एक हत्यारा हो सकता है।
कुछ इस तरह का प्रयास करें (स्पष्ट रूप से अवांछित और SO टेक्स्टबॉक्स में कोडित, चेक ब्रैकेट मिलान ई.सी.टी.):
$url = 'http://www.example.com/directory/file.csv';
if (($handle = fopen($url, "r")) !== FALSE)
{
fgetcsv($handle, 1000, ",");
$imports = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$EvID = $data[0];
$Ev = $data[1];
$PerID = $data[2];
$Per = $data[3];
$VName = $data[4];
$VID = $data[5];
$VSA = $data[6];
$DateTime = $data[7];
$PCatID = $data[8];
$PCat = $data[9];
$CCatID = $data[10];
$CCat = $data[11];
$GCatID = $data[12];
$GCat = $data[13];
$City = $data[14];
$State = $data[15];
$StateID = $data[16];
$Country = $data[17];
$CountryID = $data[18];
$Zip = $data[19];
$TYN = $data[20];
$IMAGEURL = $data[21];
$URLLink = $data[22];
$data[7] = strtotime($data[7]);
$data[7] = date("Y-m-d H:i:s",$data[7]);
if((($PCatID == '2') && (($CountryID == '217') or ($CountryID == '38'))) || (($GCatID == '16') or ($GCatID == '19') or ($GCatID == '30') or ($GCatID == '32')))
{
$imports[] = "('".md5($EventID.$PerformerID)."','".addslashes($data[0])."','".addslashes($data[1])."','".addslashes($data[2])."','".addslashes($data[3])."','".addslashes($data[4])."',
'".addslashes($data[5])."','".addslashes($data[6])."','".addslashes($data[7])."','".addslashes($data[8])."','".addslashes($data[9])."',
'".addslashes($data[10])."','".addslashes($data[11])."','".addslashes($data[12])."','".addslashes($data[13])."','".addslashes($data[14])."',
'".addslashes($data[15])."','".addslashes($data[16])."','".addslashes($data[17])."','".addslashes($data[18])."','".addslashes($data[19])."',
'".addslashes($data[20])."','".addslashes($data[21])."')";
}
}
$importarrays = array_chunk($imports, 100);
foreach($importarrays as $arr) {
if(!mysql_query("INSERT IGNORE INTO TNDB_CSV2
(id, EvID, Event, PerID, Per, VName,
VID, VSA, DateTime, PCatID, PCat,
CCatID, CCat, GCatID, GCat, City,
State, StateID, Country, CountryID, Zip,
TYN, IMAGEURL) VALUES ".implode(',', $arr)){
die("error: ".mysql_error());
}
}
fclose($handle);
}
array_chunk में संख्या के साथ खेलें, बहुत बड़ी है और इससे क्वेरी बहुत लंबी होने जैसी समस्याएं हो सकती हैं (हां my.cnf में एक कॉन्फ़िगर करने योग्य सीमा है), बहुत छोटा और इसका अनावश्यक ओवरहेड।
आप $data[x] को वेरिएबल में असाइन करने के उपयोग को भी छोड़ सकते हैं क्योंकि यह स्क्रिप्ट कितनी छोटी है, इसे देखते हुए, बस अपनी क्वेरी में सीधे $data[x] का उपयोग करें। (बड़े पैमाने पर सुधार नहीं देगा, लेकिन आपके आयात आकार के आधार पर यह थोड़ी बचत कर सकता है)।
अगली बात यह होगी कि आप कम प्राथमिकता वाले इंसर्ट/अपडेट का उपयोग करें, इसके बारे में अधिक जानकारी के लिए इसे देखें ताकि आप शुरू कर सकें:कुछ प्रश्नों को प्राथमिकता कैसे दें?
इन सब के बाद, आप mysql कॉन्फिग ऑप्टिमाइज़ेशन के बारे में सोच सकते हैं, लेकिन यह Google के लिए वास्तव में समझाने के लिए एक है क्योंकि सबसे अच्छी सेटिंग्स सभी के लिए और उनकी अनूठी स्थितियों के लिए अलग हैं
संपादित करें: एक और चीज जो मैंने पहले की है वह यह है कि यदि आपके पास बहुत सी कुंजियाँ हैं जो आयात के लिए आवश्यक नहीं हैं, तो आप उन कुंजियों को अस्थायी रूप से छोड़ सकते हैं और स्क्रिप्ट पूरी होने पर उन्हें वापस जोड़ सकते हैं। यह अच्छे समय में सुधार भी ला सकता है, लेकिन जब आप एक लाइव डेटाबेस पर काम कर रहे होते हैं तो अगर आप उस रास्ते से नीचे जाते हैं तो काम करने के लिए नुकसान होते हैं।