簡體   English   中英

在mysql數據庫中插入多個字符串的更好方法

[英]Better way of inserting multiple strings in a mysql database

因此,我有一些txt文件,每個容器大約40萬行。

每行都是一個單詞,如果還不存在,我需要添加到數據庫中。

目前,我用於檢查/添加每個單詞的代碼是

$sql = mysql_sql("SELECT `id` FROM `word_list` WHERE `word`='{$word}' LIMIT 1");
$num = mysql_num($sql);
if($num == '0'){
    $length = strlen($word);
    $timestamp = time();
    @mysql_sql("INSERT INTO `word_list` (`word`, `length`, `timestamp`) VALUES ('{$word}', '{$length}', '{$timestamp}')");
}

和被調用的函數是:

function mysql_sql($sql){
    global $db;

    $result = $db->query($sql);

    return $result;
}
function mysql_num($result){
    return $result->num_rows;
}

我正在尋找一種將每個單詞插入數據庫的更好方法。

任何想法將不勝感激。

我可以想到一些方法來做到這一點。

首先,如果您有權訪問MySQL服務器的文件系統,則可以使用LOAD DATA INFILE創建一個新表,然后將該新表插入到word_list表中。 這很可能是您最快的選擇。

其次(如果您無權訪問MySQL服務器的文件系統),將主鍵或唯一索引放在word_list.word 然后擺脫您的SELECT查詢,並使用INSERT IGNORE INTO word_list ... 這將允許MySQL自動跳過重復項,而無需您執行查詢/插入操作。

第三,如果您的表使用處理事務的訪問方法(InnoDB,而不是MyISAM),則發出BEGIN; 在開始插入循環之前的語句。 然后,每兩百行發出COMMIT;BEGIN; 然后最后發出COMMIT; 這會將您的操作包裝在多行事務中,因此可以大大加快處理速度。

試用此代碼。 它將首先使用您的所有值創建查詢,並且您將僅運行查詢一次...永遠不會一次又一次地查詢

$values = array();

$sql = mysql_sql("SELECT `id` FROM `word_list` WHERE `word`='{$word}' LIMIT 1");
$num = mysql_num($sql);

$insert_query = "INSERT INTO `word_list` (`word`, `length`, `timestamp`) VALUES ";

if ($num == '0') {
    $length = strlen($word);
    $timestamp = time();
    $values[] = "('$word', '$length', '$timestamp')";
}

$insert_query .= implode(', ', $values);

@mysql_sql($insert_query);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM