Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में बड़ी CSV फ़ाइल आयात करें

पहले अपनी स्क्रिप्ट को अनुकूलित करने का प्रयास करें। सबसे पहले, आयात करते समय कभी भी एकल प्रश्न न चलाएं जब तक कि आपके पास कोई अन्य विकल्प न हो, नेटवर्क ओवरहेड एक हत्यारा हो सकता है।

कुछ इस तरह का प्रयास करें (स्पष्ट रूप से अवांछित और 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 के लिए वास्तव में समझाने के लिए एक है क्योंकि सबसे अच्छी सेटिंग्स सभी के लिए और उनकी अनूठी स्थितियों के लिए अलग हैं

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जहां mysql खंड में

  2. एक या दो कॉलम के आधार पर सभी डुप्लीकेट पंक्तियों का चयन करें?

  3. लोड डेटा infile डिफ़ॉल्ट मान तालिका में सम्मिलित नहीं हो रहा है

  4. MySQL:एक प्रश्न में दो चीजें गिनें?

  5. गतिशील रूप से mysql बनाना क्वेरी का चयन करें